24.6. Связные списки.
Указатель можно включить в состав записи, например
Type
Workerptr = ^Workerrec;
Workerrec = record
Name : string [20];
Number : integer;
Salary : real;
Nextworker: Workerptr;
end;
Var
Worker : Workerptr;
При первом обращении к процедуре New мы передаем указатель Worker. Созданная запись содержит поле с указателем Nextworker, который можно передать следующей процедуре New, чтобы она создала следующую запись.
New(Worker^.Nextworker);
Можно организовать перемещение вдоль записи от одного элемента к другому, следуя указателям связи. Такой процесс называется сквозным проходом по списку.
Элемент, стоящий в самом конце списка должен содержать в своем поле Nextworker константу nil.
К сквозному проходу по списку приходится прибегать, например, для извлечения значений из имеющихся элементов.
Например:
Var
Listptr : Workerptr;
«---------------------»
Listptr : worker;
While Lisptr <> nil do
begin
writeln(Lisptr^.name);
Lisptr := Lisptr^.Nextworker;
end;
Например: Ввести с клавиатуры ряд символов, затем вывести их на экран дисплея в обратном порядке. Признак конца ввода символ « _ ».
Program ObrStrok;
Const
Stop_symbol = ‘_’;
Type
Uk = ^Stroka;
Stroka = record
Sym : char;
Adr : Uk;
end;
Var
Element, Sled_element : Uk;
Sim : char;
Begin
Element := nil;
Writeln(‘Введите строку символов’);
Repeat
Read(Sim);
Sled_element := Element;
New(Element);
Element^.Sym := Sim;
Element^.Adr := Sled_element;
Until (Sim = Stop_symbol);
{ Вывод }
Repeat
Write(Element^.Sym);
Sled_element := Element^.Adr;
Dispose(Element);
Element := Sled_element;
Until (Element = nil);
End.
