Задача. Сформировать список, содержащий целые числа 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; ………………..
В этом случае последний введенный элемент окажется в списке первым, а первый – последним.