Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

24.12.2011, 18:36. Просмотров 470. Ответов 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) как сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 18:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон двухсвязный список, храним указатель не элемент (C++):

Реализовать двухсвязный список. Каждый элемент списка может содержать один объект - C++
Здравствуйте, мне нужно было реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех...

Однонаправленный список, где создать указатель на первый элемент? - C++
struct listNode{ char data; listNode *next; }; class List{ public: void add(char); int delete (int); int...

двухсвязный список - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;string&gt; using namespace std; struct List { List...

Двухсвязный Список - C++
Здравствуйте, у меня такая проблема : делаю меню для двухсвязного списка. В операции добавления элемента, он добавляется или в начало или в...

двухсвязный список - C++
У меня ошибку выдает, а какую я не знаю, просто вылетает сразу после того как ввела список элементов( в чем ошибка? //Дан список из n...

Двухсвязный Кольцевой Список - C++
Дано вот такое задание:В двухсвязном кольцевом списке определить минимальный и максимальный элементы,а затем заменить их значения на сумму...

4
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.12.2011, 18:58 #2
для шаблона пофигу какой это тип
0
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
24.12.2011, 22:24  [ТС] #3
всмысле?

Добавлено через 26 секунд
просто с *d не работает к примеру добавление элемента
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.12.2011, 22:46 #4
здесь хранится сам элемент, нужно поменять так чтобы был указатель(*d) как сделать?
Берете и меняете. После этого конечно же ничего не заработает и даже не скомпилится. Далее везде в коде, где ведется работа с узлами и где код написан из расчета на то, что d это значение, везде этот код нужно переписать учитывая то, что теперь d - это указатель. Не забыть сделать правильное удаление узлов (не забыть позвать delete для d), просмотреть код на предмет копирования нодов и т.д. Вот так вот и допилить список под новые требования.
Ну или задавайте более конкретные вопросы, с чем там у вас проблемы (что хотите, как сделали, где ошибка, как она проявляется и т.п. чем больше инфы, тем лучше для вас же).
0
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 минут
!!!!!!
0
25.12.2011, 14:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 14:42
Привет! Вот еще темы с ответами:

Двухсвязный список и оператор [] - C++
Здравствуйте! Очень нужна помощь, так как 4 часа поисков в интернете не дали конкретных результатов. Я в целях обучения/тренировки...

Добавление элементов в двухсвязный список - C++
Надо создать двухсвязный список и надо реализовать добавление и удаление элементов: в начале, в конце и в середине (например добавить...

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

Двухсвязный список (разбиение кода на файлы) - C++
Есть стандартный код реализации шаблонного двухсвязного списка: #include &lt;iostream&gt; using namespace std; template &lt;typename...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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