Создание списка

Задача. Сформировать список, содержащий целые числа 3, 5, 1, 9.

Определим запись типа TList с полями, содержащими характеристики данных – значения очередного элемента и адреса следующего за ним элемента

PList = ^TList;

TList = record

Data: Integer;

Next: PList;

end;

Чтобы список существовал, надо определить указатель на его начало. Опишем переменные.

Var

Head, x: PList;

Создадим первый элемент: New(Head); { выделяем место в памяти для переменной Head } Head^.Next:= nil; { указатель на следующий элемент пуст (такого элемента нет) } Head^.Data:= 3; { заполняем информационное поле первого элемента }

Продолжим формирование списка, для этого нужно добавить элемент в конец списка.

Введем вспомогательную переменную указательного типа, которая будет хранить адрес последнего элемента списка: x:= Head; {сейчас последний элемент списка совпадает с его началом}

New(x^.Next); { выделим области памяти для следующего (2-го) элемента и поместим его адрес в адресную часть предыдущего (1-го) элемента }

x:= x^.Next; { переменная x принимает значение адреса выделенной области. Таким образом осуществляется переход к следующему (2-ому) элементу списка }

x^.Data:= 5; { значение этого элемента } x^.Next:= nil; {следующего значения нет }

Остальные числа заносятся аналогично: New(x^.Next); { выделим области памяти для следующего элемента } x:= x^.Next; { переход к следующему (3-му) элементу списка } x^.Data:= 1; { значение этого элемента } x^.Next:= nil; {следующего значения нет } New(x^.Next); { выделим области памяти для следующего элемента } x:= x^.Next; { переход к следующему (4-му) элементу списка } x^.Data:= 9; { значение этого элемента } x^.Next:= nil; {следующего значения нет }

Замечание. Как видно из примера, отличным является только создание первого (Head) элемента – головы списка. Все остальные действия полностью аналогичны и их естественно выполнять в цикле.

Присоединение нового элемента к голове списка производится аналогично: ……………….. New(x); { ввод значения элемента x^.Data:= … } x^.Next:= Head; Head:= x; ………………..

В этом случае последний введенный элемент окажется в списке первым, а первый – последним.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: