Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2011, 20:46   #1
Lusin
 
Регистрация: 25.05.2011
Сообщений: 7
По умолчанию связанные списки

Здравствуйте, в С++ есть такая тема как "связанные списки". Ни как не могу с ней разобраться. не могу понять, что с собой представляет связанный список. помогите пожалуйста понять это или подскажите книгу.
Lusin вне форума Ответить с цитированием
Старый 26.08.2011, 20:52   #2
Lusin
 
Регистрация: 25.05.2011
Сообщений: 7
По умолчанию

помогите разбиратся в этом программе. не могу понять зачем так много указателей и для чего они?


class list {
public:
list *head; //начало списка
list *tail; //конец списка
list *next; // следующий элемент
int num; //число для хранения
list() {head=tail=next=0;}
virtual void store(int i)=0;
virtual int retrieve()=0;
};

class queue: public list {
void store(int i);
int retrieve();
};
void queue::store(int i){
list *item;
item = new queue;
if(!item) cout << "ошибка выделения памяти." << endl;
item->num=i;
if(tail)
tail->next=item;
tail=item;
item->next=NULL;
if(!head)
head=tail;
}
int queue ::retrieve() {
int i;
list *p;
if(!head)
cout << "empty" << endl;
i=head->num;
p=head;
head=head->next;
delete p;
return i;
}
class stackublic list {
void store(int i);
int retrieve();
};

void stack ::store(int i) {
list *item;
item =new stack;
if(!item) cout << "ошибка выделения памяти." << endl;
item->num=i;
if(head)
item->next=head;
head=item;
if(!tail)
tail=head;
}
int queue ::retrieve() {
int i;
list *p;
if(!head) cout << "empty" << endl;
i=head->num;
p=head;
head=head->next;
delete p;
return i;
}
Lusin вне форума Ответить с цитированием
Старый 26.08.2011, 23:07   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вроде их называют связными списками, ну да ладно. Каждый элемент списка - это совокупность некоторых данных и ссылки на следующий элемент списка (такие списки называются односвязными; если добавить ссылку на предыдущий элемент - то двусвязными). Отсюда и обилие указателей - именно они и представляют собой ссылку на следующий/предыдущий элемент. Банальный пример структуры:
Код:
struct list {
  int data;
  list *next;
};
У последнего элемента next должен иметь некое значение, отличимое от других, для обозначения конца списка (логично выбрать 0). В список удобно вставлять новые элементы или удалять их (выполняется за константное время), но неудобно обращаться к элементам по индексу, как в массиве (потому что элемент с заданных индексом еще найти нужно, а в массиве известен его адрес). Одна из основных операций - проход по всему списку от начала до конца. А вообще - читайте книжки, или, например, википедию, там довольно понятно все изложено.

Updated

В вашем примере кода все непросто для изучения, там создается класс списка и различные варианты (стек, очередь) структур данных. Если хотите, могу по-быстрому налопатить простенький односвязный список с объяснением, как все работает, это несложно.
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 26.08.2011 в 23:10.
Granus вне форума Ответить с цитированием
Старый 27.08.2011, 10:08   #4
Lusin
 
Регистрация: 25.05.2011
Сообщений: 7
По умолчанию

помогите если не трудно. эта программа слишком сложно для меня.
Lusin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные списки ((((((((( !!!!!! cj_loman Помощь студентам 2 27.05.2011 07:19
связанные списки nikulia Microsoft Office Excel 4 20.02.2011 23:56
Связанные списки. С++ S1av0k Общие вопросы C/C++ 1 21.10.2010 23:08
связанные списки Proger_1 Общие вопросы C/C++ 1 28.05.2010 22:11
Связанные списки Fezdipekla Microsoft Office Access 3 02.04.2010 22:07