Основы программирования на C++, PASCAL
д., х4 — результат последнего измерения. Связанный список обладает тем замечательным свойством, что его можно дополнять по мере поступления новой информации. Добавление происходит путем присоединения нового элемента к концу списка. Значение Nil в последнем элементе заменяется ссылкой на новый элемент цепочки:
Связанный список не занимает лишней памяти. Память расходуется в том объеме, который требуется для поступившей информации.
В программе для представления элементов цепочки используется комбинированный тип (запись). Для нашего примера тип такого элемента может быть следующим:
Type Pe=^Elem;
Elem=Record
Т: Real;
P: Ре
End;
Здесь Ре — ссылочный тип на переменную типа Elem. Этим именем обозначен комбинированный тип, состоящий из двух полей: T — вещественная величина, хранящая температуру, P — указатель на динамическую величину типа Elem.
В таком описании нарушен один из основных принципов Паскаля, согласно которому на любой программный объект можно ссылаться только после его описания. В самом деле, тип Ре определяется через тип Elem, а тот, в свою очередь, определяется через тип Ре. Однако в Паскале допускается единственное исключение из этого правила, связанное со ссылочным типом. Приведенный фрагмент программы является правильным.
Пример 2. Рассмотрим программу формирования связанного списка в ходе ввода данных.
Type Pe=^TypElem;
TypElem=Record
Т: Real; P: Ре
End;
Var Elem,Beg: Pe;
X: Real; Ch: Char;
Begin (Определение адреса начала списка и его сохранение}
NEW(Elem); Beg:=Elem;
Elem^.P:=Elem;
{Диалоговый ввод значений с занесением их в список и организацией связи между элементами)
While Elem^.P<>Nil Do
Begin
Write('Вводите число:');
ReadLntElem^.T);
Write('Повторить ввод? (Y/N)');
ReadLn(Ch);
If (Ch='n') Or (Ch=-'N')
Then Elem^.P:=Nil
Else Begin
NEW(Elem^.P) ;
Elem:=Elem^.P
End
End;
WriteLn(«Ввод данных закончен»);
{Вывод полученной числовой последовательности}
WriteLn(«Контрольная распечатка»);
Elem:=Beg;
Repeat
WriteLn (N,':'/Elem^.T:8:3);
Elem:=Elem^.P
Until Elem=Nil
End.
Здесь ссылочная переменная Beg используется для сохранения адреса начала цепочки. Всякая обработка цепочки начинается с ее первого элемента. В программе показано, как происходит продвижение по цепочке при ее обработке (в данном примере — распечатке информационной части списка по порядку).