Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_МЕТ№2.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
247.81 Кб
Скачать

1. Использование указателей. Списки

Список представляет собой совокупность динамических объектов одного типа, упорядоченных с помощью ссылок.

Объекты называются элементами списка. Элементом списка обычно является запись, которая содержит по крайней мере два поля (см. рис.9):

- информационное;

- указатель.

Рис. 9. Структура элемента списка

Сам список представляется в виде рис.10.

Рис. 10. Структура списка

Каждый элемент списка имеет указатель на соседа. Последний элемент имеет указатель Nil. Элементы списка и указатели описываются так:

Type

ук = ^Эл_сп; {Опережающее описание допускается только в этом случае }

Эл_сп=Record;

Uнф:Тип_Инф;

След:Указатель

end;

Тип информационного элемента – любой (скалярный, строка, массив и т. д.).

Пример.

Тype

Ptr= Sp;

Sp=Record

Buk:Char;

Sl:Ptr;

end;

Var

p,q:Ptr; { указатели для элемента списка}

Ln:Sp; {элемент списка}

С помощью списков достаточно просто представляются строки и тексты переменной длины, а также очереди. Очередь – понятие, которое широко используется в вычислительной технике. Список позволяет моделировать операции добавления элементов в очередь и выборки из нее.

Основные операции над списками:

1) переход от одного элемента к другому (следующему );

2) включение нового элемента в список;

3) удаление элемента изсписка.

Первая операция выполняется просто: текущему значению ссылки присваивается значение из ее же поля указателя:

ук: = ук^. ccылка;

Пример.

Pp: = Pp^.Sl;

В результате Pp – ссылка на следующий элемент или Nil, если элемент последний.

Включение элемента Np после элемента Pp в список иллюстрирует рис.11. Для выполнения этой операции нужно задать ссылку из вставляемого элемента на следующий (она равна ссылке из предыдущего элемента на следующий), а затем – изменить ссылку из предыдущего элемента на вставляемый. Существующая связь разрывается последней, чтобы не потерять элемент. Фрагмент программы будет иметь вид:

New(Np);

Readln(Np^.Buk); {Создали вставляемый элемент}

Np:=Pp^.Sl; { Ссылка из вставляемого на следующий}

Pp:=Np; { Ссылка из предыдущего на вставляемый}

Рис. 11. Включение элемента в список

У даление элемента Np, стоящего после Pp, выполняется по схеме рис.12. При удалении сначала переносятся ссылки, а потом удаляется элемент. Ссылка на удаляемый элемент не должна теряться, пока он не будет уничтожен или включен в другой список, иначе из него получится "мусор". Фрагмент программы, в котором выполняется удаление элемента Np будет иметь вид:

Np: = Pp^.Sl; {запомнили ссылку на удаляемый элемент}

Pp^.Sl:=Pp^.Sl^.Sl; {перенесли ссылку}

Dispose (Np); {удалили элемент }

{можно Np^.Sl:=Nil;-тогда элемент не теряется}

Рис. 12. Включение элемента в список

2. Очереди

Наиболее простые способы формирования и обслуживания очередей (дисциплины обслуживания):

LIFO — обслуживание в порядке, обратном поступлению

FIFO — обслуживание в порядке поступления.

Рассмотрим механизм формирования и выборки очередей на примере списка, в которых информационный элемент имеет тип Char.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]