Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК№17.doc
Скачиваний:
2
Добавлен:
24.08.2019
Размер:
122.88 Кб
Скачать

Лекция №17. Динамические структуры данных. Очередь. Односвязный список

  1. Очередь

Рассмотрим общую схему формирования очереди.

Для создания очереди и работы с ней необходимо иметь (как минимум) два указателя:

-на начало очереди (возьмем идентификатор ВеgUkaz),

-на конец очереди (возьмем идентификатор ЕndUkaz).

Для удобства работы часто используют временный (рабочий) указатель (возьмем р).

Правило очереди:

1) первым пришел – первым уйдешь.

2) движение лишь в одном направлении

начало конец

взять добавить

1.1. Создание очереди

  1. Исходное состояние:

ВеgUkaz:=nil;

ЕndUkaz:=nil;

2. Выделение памяти под 1-й элемент очереди:

new(p);

начало

конец

1 элемент в очереди

3. Занесение информации в первый элемент очереди:

p^.inf:=3;

p^uk:=nil;

4. Установка указателя на 1-й элемент:

ВеgUkaz:=p;

EndUkaz:=p;

1.2. Добавление элемента в очередь

1.Исходное состояние:

ВеgUkaz EndUkaz

начало конец

новый

2. Выделение памяти под новый элемент и занесение информации в новый элемент:

new(p);

p^.inf:=10;

p^.uk:=nil;

ВеgUkaz EndUkaz p

3. Установка связи между последним элементом очереди и новым:

EndUkaz^.uk:=p;

ВеgUkaz EndUkaz p

4. Перемещение указателя конца очереди на новый элемент:

EndUk:=p;

ВеgUkaz EndUkaz p

1.3. Удаление элемента из очереди

1. Исходное состояние:

2. Установка на удаляемый элемент вспомогательного элемента р:

p:= ВеgUkaz;

3. Перестановка указателя начала очереди на следующий элемент, используя значение поля uk, которое хранится в первом элементе:

ВеgUkaz:=p^.uk;

4. Освобождение памяти начального элемента очереди, используя дополнительный указатель р:

dispose(p).

Задача.

Создать очередь из 10-ти вещественных чисел, вывести элементы на экран, предварительно их удалив.

program och;

type ukaz=^ochered;

ochered=record

inf:real;

uk:ukaz

end;

var BegUkaz, EndUkaz: ukaz;

i: byte;

ргосеdurе аdd(val: rеаl); {процедура создания и добавления

var p:ukaz; элемента в очередь}

begin

new(р);

р^.inf:= val;

р^.uk:= nil;

if EndUkaz=nil then BegUkaz:=p

else EndUkaz^.uk:=p;

EndUkaz:=p

end;

ргосеdurе del; {процедура удаления элемента из очереди }

var p:ukaz;

begin

p:= BegUkaz ;

BegUkaz:=p^.uk;

if BegUkaz=nil then EndUkaz:=nil; {если удаляется последний элемент}

EndUkaz:=nil;

dispose(p)

end;

begin

BegUkaz=nil; EndUkaz:=nil; {начальные установки}

for i:=1 to 10 do add(i); {создание очереди}

while BegUkaz<>nil do {вывод элементов и их удаление}

begin

writeln(‘значение=’, BegUkaz:=p^.uk;);

del;

end

end.

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