Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций часть 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
70 Кб
Скачать
☆

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.

73