Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
#1

Шаблон двухсвязный список, храним указатель не элемент - C++

24.12.2011, 18:36. Просмотров 444. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include "DSpisok.h"
using namespace std;
 
int main(int argc, char *argv[])
{
    //randomize();
    List <double> A;
    A.add(4);
    A.add(6);
    for(int i=0;i<100;i++)
     A.add(rand()%100);
    A.print();
    getch();
    A.print_back();
    getch();
    A.remove(4.32);
    A.print();
    system("PAUSE");
    return EXIT_SUCCESS;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef _Rmatrix
#define _Rmatrix
template <class Data> class List
{
    class Node
    {
        public:
            Data d;
            Node *next, *prev;
            Node(Data dat = 0){d = dat; next = 0; prev = 0;}
    };
    Node *pbeg, *pend;
    public:
        List();
        ~List();
        void add(Data d);
        Node * find(Data i) {
                     Node *pv = pbeg;
                     while (pv)
                      {
                         if(pv->d == i)break;
                         pv = pv->next;
                      }
                      return pv;
        }
        Node * insert(Data key, Data d)
        {
            Node *pkey = find(key);
            if(!pkey)
            {
               Node *pv=new Node(d);
                pv->next=pkey->next;
                pv->prev=pkey;
                pkey->next=pv;
                if (pkey!= pend)(pv->next)->prev = pv; else pend=pv;
                 return pv;
              }
             return 0;
        };
        bool remove(Data key);
        void print();
        void print_back();
};
 
using namespace std;
 
//-----------------------------
template <class Data> List <Data>::~List()
{
    if (pbeg !=0)
    {
        Node *pv = pbeg;
        while (pv)
        {
            pv=pv->next;
            delete pbeg;
            pbeg=pv;
        }
    }
}
//------------------------------------
template <class Data> List <Data>::List()
{
    pbeg=0;
    pend=0;
}  
//--------------------------------------------------
template <class Data> void List <Data>::print()
{
    Node *pv = pbeg;
    cout<<endl<<"list: ";
    while (pv)
    {
        cout<<pv->d<<' ';
        pv = pv->next;
    }
    cout<<endl;
}
//-----------------------------------
template <class Data> void List <Data>::print_back()
{
    Node *pv = pend;
    cout<<endl<<" list back: ";
    while (pv)
    {
        cout<<pv->d<<' ';
        pv=pv->prev;
    }
    cout<<endl;
}
//--------------------------------------
template <class Data> void List <Data>::add(Data d)
{
    Node *pv = new Node(d);
    if (pbeg == 0)pbeg = pend = pv;
    else
    {
        pv->prev = pend;
        pend->next = pv;
        pend = pv;
    }
}
//---------------------------------------
template <class Data> bool List <Data>::remove(Data key)
{
    if(Node *pkey = find(key))
    {
        if (pkey == pbeg)
        {
            pbeg = pbeg->next;
            pbeg->prev = 0;
        }
        else
        if (pkey == pend)
        {
            pend = pend->prev;
            pend->next = 0;
        }
        else
        {
            (pkey->prev)->next = pkey->next;
            (pkey->next)->prev = pkey->prev;
        }
        delete pkey;
        return true;
    }
    return false;
}
//-------------------------------------------------
 
#endif
здесь хранится сам элемент, нужно поменять так чтобы был указатель(*d) как сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 18:36     Шаблон двухсвязный список, храним указатель не элемент
Посмотрите здесь:

C++ Двухсвязный Кольцевой Список
C++ Двухсвязный Список
Двухсвязный список и оператор [] C++
Реализовать двухсвязный список. Каждый элемент списка может содержать один объект C++
C++ перевернуть двухсвязный линейный список
Однонаправленный список, где создать указатель на первый элемент? C++
двухсвязный список C++
C++ двухсвязный список
Двухсвязный список (разбиение кода на файлы) C++
C++ Двухсвязный список: заполнить в порядке возрастания, организовать поиск
C++ Добавление элементов в двухсвязный список
Двухсвязный список в классе, метод удаления C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.12.2011, 18:58     Шаблон двухсвязный список, храним указатель не элемент #2
для шаблона пофигу какой это тип
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
24.12.2011, 22:24  [ТС]     Шаблон двухсвязный список, храним указатель не элемент #3
всмысле?

Добавлено через 26 секунд
просто с *d не работает к примеру добавление элемента
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.12.2011, 22:46     Шаблон двухсвязный список, храним указатель не элемент #4
здесь хранится сам элемент, нужно поменять так чтобы был указатель(*d) как сделать?
Берете и меняете. После этого конечно же ничего не заработает и даже не скомпилится. Далее везде в коде, где ведется работа с узлами и где код написан из расчета на то, что d это значение, везде этот код нужно переписать учитывая то, что теперь d - это указатель. Не забыть сделать правильное удаление узлов (не забыть позвать delete для d), просмотреть код на предмет копирования нодов и т.д. Вот так вот и допилить список под новые требования.
Ну или задавайте более конкретные вопросы, с чем там у вас проблемы (что хотите, как сделали, где ошибка, как она проявляется и т.п. чем больше инфы, тем лучше для вас же).
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
25.12.2011, 14:42  [ТС]     Шаблон двухсвязный список, храним указатель не элемент #5
94 J:\ооп\lab4\DSpisok.h instantiated from `void List<Data>::add(Data) [with Data = double]'

Добавлено через 19 секунд
как переностроить функции, хотя бы одну к примеры, чтоыб поянть

Добавлено через 2 часа 45 минут
!!!!!!
Yandex
Объявления
25.12.2011, 14:42     Шаблон двухсвязный список, храним указатель не элемент
Ответ Создать тему
Опции темы

Текущее время: 12:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru