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

Класс односвязного списка структур - C++

Восстановить пароль Регистрация
 
GROMnsk
Сообщений: n/a
12.01.2010, 11:59     Класс односвязного списка структур #1
сижу ломаю голову над тем, что есть класс односвязного списка стуктур... суть такова:

структура данных - односвязный список структур
а структура данных должна быть реализована в виде класса

я что-то не могу понять зачем список помещать в классе и с реализацией что-то недопонимаю. Буду очень признателен, если мне ответят на этот вопрос, было бы не плохо, если бы еще и с примером, в поиске нужного не нашел(наверное слепой) ^_^
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2010, 11:59     Класс односвязного списка структур
Посмотрите здесь:

Разработать шаблонный класс "дек" на основе односвязного списка C++
Построение односвязного списка C++
C++ Сортировка односвязного списка
Реализовать класс односвязного списка действительных чисел C++
Напишите класс «Стек» для целочисленных данных на основе односвязного списка C++
C++ Вывод односвязного списка на C
C++ Создать шаблонный класс библиотека на основе односвязного списка
Вывод односвязного списка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.01.2010, 16:25     Класс односвязного списка структур #2
Надеюсь моя разработка тебе поможет: я проповедую open source поэтому и выложил
свою разработку:

Добавлено через 15 минут
Должен работать:
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
#include <iostream.h>
 
//Оболочка список
class List{
private:
 
//Описание узла списка
struct Node {
int data;
Node *next;
Node *prev;
};
//-------------------------------------------------------------
 
Node *pbeg;          //начало списка
Node *pend;          //конец списка
int size;            //размер списка
 
public:
//Функции автоматизации----------------------------------------
List(){pbeg = NULL; pend =NULL; size = 0;} //Конструктор по умолчанию создаёт пустой список
List(int d);
List(const List&p);
virtual~ List();
//-------------------------------------------------------------
int popb();                //выборка из начала  
int find(int key);         //найти в списке
long add(int d);           //Добавить в конец списка           
const List& operator = (const List&p);
 
//Дополнителные фишки------------------------------------------
List& operator >>(int&d);      //альтернатива добавлению в конец
List& operator <<(int&d);      //альтернатива выборке
inline int getsize() const { return size; }    //получение размера
 
inline bool isEmpty()const { if(pbeg!=NULL)return 0; else return 1; }  //проверка существования списка
void Update();            //отчищает весь список: делает полную выборку из начала
};
 
//-------------------------------------------------------------
List::List(int d){
size = 0;           
Node *pv = new Node; //Созаём узел
pv->data=d;
pv->next = NULL;     //признак конца списка
pv->prev = NULL;     //признак начала списка
//Формируем начало и конец списка
pbeg=pv;
pend = pbeg;
size++;              //увеличиваем размер, один узел создан
//-------------------------------
}
 
//Конструтор копирования----------
List::List(const List&p){
//Если копировать не от куда, то есть передаваемы объект список пуст
//Ничего не делаем, создаём как: конструктор по умолчанию
if(p.pbeg==NULL||p.pend==NULL){
pbeg = NULL;
pend = NULL;
size=0;
}
 
//Иначе создаём список и копируем в него другой список
else { 
    
pbeg = NULL; //обнуляем
pend = NULL; //обнуляем
 
//Создаём начало-------------------
{
Node * pv = new Node;
pv->data=p.pbeg->data;  //копируем данные из начала
pv->next = NULL;      //Cледёющего ещё нет
pv->prev = NULL;      //предыдущего нет
pbeg = pv;            //форируем начало
pend = pbeg;          //формируем конец
}
 
{
//Формируем оставшиусь часть списка путём копирования элементов из драгого списка
Node *tmp = p.pbeg;
tmp=tmp->next;       //первый узел пропускаем
while(tmp){
//Добавляем в конец нового списка узлы
Node *pv = new Node ; //создаём новый узел
pv->data=tmp->data;     //копируем данные
pv->next = NULL;      //следующего пока нет
pv->prev = pend;      //новый связывается с последним
pend->next=pv;        //последний связывается с новым
pend =pv;             //новый становится последним
tmp=tmp->next;        //cледующий
}
 
}
 
//---------------------------------
size = p.size;  //копируем счётчик
}
 
}
 
//Операция присваивания-------------
 
const List& List::operator = (const List&p){
 
if(&p==this)return *this;    //проверка на самоприсваивание 
//Если не чего присваивать--------------------------------
if(p.pbeg==NULL||p.pend==NULL)return *this;
 
//Иначе создаём список и копируем в него другой список
else { 
Update();     //отчищаем список
 
pbeg = NULL;  //обнуляем
pend = NULL;  //обнуляем
 
//Создаём начало-------------------
{
Node * pv = new Node;
pv->data=p.pbeg->data;       //копируем данные из начала
pv->next = NULL;     //Cледующего ещё нет
pv->prev = NULL;     //предыдущего нет
pbeg = pv;           //форируем начало
pend = pbeg;         //формируем конец
}
 
{
//Формируем оставшуюся часть списка путём копирования элементов из другого списка
Node *tmp = p.pbeg;
tmp=tmp->next;        //первый узел пропускаем
 
//проходим по списку с которого копируем
while(tmp){
//Добавляем в конец нового списка узлы
Node *pv = new Node ; //создаём новый узел
pv->data=tmp->data;     //копируем данные
pv->next = NULL;      //следующего пока нет
pv->prev = pend;      //новый связывается с последним
pend->next=pv;        //последний связывается с новым
pend =pv;             //новый становится последним
tmp=tmp->next;        //cледующий
}
 
}
 
//---------------------------------
size = p.size;  //копируем счётчик
 
}
 
return *this ;               //возвращаем себя
 
}
 
 
 
 
 
//Деструктор-----------
List::~List(){
Update();     //отчищаем весь список если в нём что то есть
 
}
 
 
//Добавить в конец списка  
long List::add(int d){
//Если список не создан создаём 
if(pbeg==NULL){
size = 0;           
Node *pv = new Node; //Созаём узел
pv->data=d;
pv->next = NULL;     //признак конца списка
pv->prev = NULL;     //признак начала списка
//Формируем начало и конец списка
pbeg=pv;
pend = pbeg;
size++;              //увеличиваем размер, один узел создан
return 0;            //создали первую структуру
}
    
//Иначе добавляем в конец списка    
else{
Node *pv = new Node;    
pv->data=d;
pv->next = NULL;
 
pv->prev = pend;   //cвязываемся с конецом списка
pend->next = pv;   //конец связывается с новым узлом
pend=pv;           //концом становится новый узел
size++;            //увеличиваем размер, оузел добавлен в конец
return 1;          //добавили в конец  
}
 
 
}
 
//Добавление в конец: альтернатива
List& List::operator >>(int&d){
add(d);
return *this;
 
}
 
//выборка из начала
int List::popb(){
Node * pv = NULL;  //создаём указатель
//Если список не пуст
pv=pbeg;          //получаем узел из начала
int data(0);      //переменная через которую возвращаем значение
//Если есть что удалять
if(pv!=NULL){
pbeg=pbeg->next;   //следующий в начало
data=pv->data;     //получаем данные из начала
delete pv;         //удаляем узел: старое начало
size--;            //уменьшаем счётчик размера
return data;       //возвращаем полученные данные
}
//----------------------------------------------------------------
return data;       //если список пуст
 
}
 
//альтернатива выборке
List& List::operator <<(int&d){
d=popb();    
return *this;
 
}
 
//отчистак всего списка
void List::Update(){
//Пока не пуст делаем выборку---
while(!isEmpty()){
    popb();
}
 
}
 
//поиск----------------------------
int List::find(int key){
Node *tmp = pbeg;  //получаем узел из начала
int t(0);         //просто на всякий случай для возврата
//Перемещаемся от начала к концу--------------------
while(tmp){
if(tmp->data==key)return tmp->data;  //если ключ совпал, возвращаем данные
tmp=tmp->next;                     //следующий во временный указатель
}
//--------------------------------------------------
return t;          //Если не нашли
 
}
 
 
 
 
 
 
 
//Клиент------------
void main(){
return;
}
//------------------
GROMnsk
Сообщений: n/a
12.01.2010, 16:38     Класс односвязного списка структур #3
или я слепой или ее нет ^_^
ну я вообще разобрался вполне, есть только пару иных проблем
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
#include<iostream>
#include<fstream>
#include <ctime>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
// собсно класс
class MainList
{
  private:
 
typedef
struct _node {
    int value;
    char Surname;
    char Group;
    int day, month, year;
    struct
    _node * next;
}Node,List;
 
  public:
 
 
List * list;
MainList(List * list);
~MainList();
void AddNode(List * list,int value);
int DelNode(List * list,int value);
void PrintList(List * list);
int OccList(List * list,int value );
};
 
 
// собственно применение, опустил описание функций класса за ненадобностью
 
 
        List list;  
    MainList A(&list);
            A.PrintList(&list);
 
        };
собственно сама проблема: error C2065: 'list' : undeclared identifier
не понимаю что ему не нравится в такого рода описании, вроде должно работать, но если я не прав, то может подскажите добры люди как надо сделать?) И еще вопрос насчет динамической структуры, как запилить и как использовать? Заранее благодарю

Добавлено через 11 минут
error C2065: 'List' : undeclared identifier
забыл написать еще вот эту
Yandex
Объявления
12.01.2010, 16:38     Класс односвязного списка структур
Ответ Создать тему
Опции темы

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