Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_SAOD_-_Dinamicheskie_struktury_dannykh.doc
Скачиваний:
124
Добавлен:
21.03.2016
Размер:
2 Мб
Скачать
☆
    1. Очередь

Очередью называется упорядоченный набор элементов, которые могут исключаться с одного ее конца (называемого началом очереди), а включаться с другого конца (называемого концом очереди). Каждый элемент очереди характеризуется одним и тем же набором полей. Логическая структура очереди:

Исключение

A

B

C

D

E

Включение

Начало

Конец

Очередь функционирует по принципу FIFO(FirstIn–FirstOut: «первым пришел – первым исключается»). В реальном мире имеется множество примеров очередей: очередь к кассе магазина, очередь задач, обрабатываемых вычислительной машиной. Каждый элемент очереди может содержать одно или несколько полей, число элементов в очереди не ограничено. Очередь, не содержащая ни одного элемента, называется пустой.

    1. Операции над очередью

Над очередью q(от англ.queue– очередь) могут быть выполнены следующие операции:

1) включение нового элемента vв конец очереди –Insert(q,v);

2) исключение элемента из начала очереди – Remove(q) и возвращение его значения;

3) выработка признака «очередь пуста» – Empty(q);

4) считывание первого элемента без его удаления – HeadValue(q);

5) считывание последнего элемента очереди – RearValue(q);

6) определение числа элементов очереди Size(q);

8) очистка очереди – Clear(q).

Первые три операции над очередью являются основными. Операции Empty,Size, иClearдля очереди аналогичны соответствующим операциям для стека.

    1. Дек

Деком (DEQ– от английскогоdouble ended queue, очередь с двумя концами) называется упорядоченный набор элементов, включение и исключение элементов в котором могут осуществляться с любого из двух его концов. Логическая структура дека:

Включение

Исключение

A

B

C

D

E

Исключение

Включение

Начало

Конец

Частные случаи дека – дек с ограниченным входом и дек с ограниченным выходом (включение или исключение элементов осуществляется только с одного из концов дека).

    1. Операции над деком

Над деком dмогут быть выполнены все операции, определенные для очередиq, а также добавляются две основные операции:

– включение элемента со значением vв начало дека –Push(d, v);

– исключение элемента из конца дека – Delete(d) и возвращение его в качестве значения функции.

    1. Реализация очереди и дека

Реализация очереди (дека) с помощью динамических переменных:

При этом вводятся две переменные типа указателя на элемент очереди или дека: Head– на начало,Rear– на конец очереди или дека. В поле ссылки последнего элемента записывается значениеnil.

Описание классов tQueueиtDEQ– наследников классаtStack– может быть следующим:

type

// Описание класса tQueue

tQueue=class(tStack)// класс - очередь

protected

fRear: pItem;// поле - указатель на конец очереди

public

procedureInsert(v:tValue);// включение элемента со значением v

functionRemove: tValue;// исключение элемента из очереди

functionHeadValue:tValue;// возвращение значения первого элемента

functionRearValue:tValue;// возвращение значения последнего элемента

constructorCreate;// создание пустой очереди

end;// tQueue

// Описание класса tDEQ

tDEQ=class(tQueue)// класс - дек

procedurePush(v: tValue);// включение элемента со знач. v в началодека

functionDelete: tValue;// исключение элемента из конца дека

end;// tDEQ

Класс tQueueнаследует у классаtStackполяfHeadиfSize, свойствоSize, методыEmpty,Clear,Destroyи перекрывает методCreate.

Класс tDEQнаследует у классаtQueueполяfHead,fSize,fRear, свойствоSize, методыEmpty,Clear,Destroy,Insert,Remove,HeadValue,RearValue,Createи перекрывает методPushклассаtStack.