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

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

Восстановить пароль Регистрация
 
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
24.12.2011, 18:36     Шаблон двухсвязный список, храним указатель не элемент #1
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) как сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 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
1477 / 1053 / 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     Шаблон двухсвязный список, храним указатель не элемент
Ответ Создать тему
Опции темы

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