Добрый день! Пишу связанный список, принцип работы первый вошел, первый вышел. Использую структуру, которая хранит указатель и данные.
| Код | struct link{ int data; link* next; };
int _tmain(int argc, _TCHAR* argv[]) { link* l1; // основные данные link* ff; // первый элемент link** prev; // предыдущий элемент списка
ff = new link; ff->next = NULL; ff->data = 0; prev = &ff; // присваиваем адрес указателя на первый элемент
cout << "\nff->next = " << ff->next << " ff->data = " << ff->data; l1 = new link; // создаем следующий элемент l1->data = 1; l1->next = NULL; (*prev)->next = l1; //присваиваем предыдущему адрес этого элемента prev = &l1; // записываем в указатель предыдущего элемента адрес текущего cout << "\nff->next = " << ff->next << " ff->data = " << ff->data; cout << "\nl1->next = " << l1->next << " l1->data = " << l1->data;
l1 = new link; // добавляем еще два элемента l1->data = 2; l1->next = NULL; (*prev)->next = l1; prev = &l1; cout << "\nl1->next = " << l1->next << " l1->data = " << l1->data;
l1 = new link; l1->data = 3; l1->next = NULL; (*prev)->next = l1; prev = &l1; cout << "\nl1->next = " << l1->next << " l1->data = " << l1->data;
link* buf; // вывод на экран cout << "\n\n-+-+-+-+-+-+-+-+-+-+-+-+-" << endl; buf = ff; // записали в буфер адрес первого элемента cout << "\nbuf " << buf->data << " N " << buf->next << endl; buf = buf->next; // записали в буфер адрес следующего элемента cout << "\nbuf " << buf->data << " N " << buf->next << endl; // вот здесь начинаются не понятное // buf->next (адрес следующего элемента) равен 0
delete l1, ff; return 0; }
|
Результат работы программы:
ff->next = 0 ff->data = 0 ff->next = f50030 ff->data = 0 l1->next = 0 l1->data = 1 // почему в l1->next не меняется адрес.. ? l1->next = f50040 l1->data = 2 l1->next = f50050 l1->data = 3
-+-+-+-+-+-+-+-+-+-+-+-+-
buf 0 N f50030 buf 1 N 0
Подскажите, где я ошибаюсь... П.С. Переписал программу без класса потому что пытался найти ошибку.. для проверки.. |