- •Федеральное агентство по образованию
- •Тема 3. Бинарные деревья 41
- •Тема 4. Графы 66
- •Введение
- •Терминология
- •Классификация структур данных по различным признакам
- •Типовые операции над структурами данных
- •Эффективность алгоритмов. O-обозначения
- •Операции над стеком
- •Реализация стека
- •Тема 1. Стеки, очереди, деки
- •Реализация основных операций над стеком
- •Использование стека для преобразования форм записи выражений.
- •Очередь
- •Операции над очередью
- •Операции над деком
- •Реализация очереди и дека
- •Реализация основных операций над очередью и деком
- •Итератор
- •Лабораторная работа 1. Стеки, очереди, деки
- •Тема 2. Односвязные и двусвязные линейные списки
- •Линейный список
- •Операции над линейным списком
- •Реализация линейного списка в виде односвязной динамической структуры
- •Реализация основных операций над односвязным списком
- •Циклический список
- •Операции над циклическим списком
- •Односвязная реализация циклического списка
- •Реализация основных операций над односвязным циклическим списком
- •Реализация линейного списка в виде двусвязной динамической структуры
- •Реализация основных операций над двусвязным списком
- •Циклический двусвязный список
- •Реализация основных операций над двусвязным циклическим списком
- •Лабораторная работа 2. Односвязные и двусвязные линейные списки
- •Тема 3. Бинарные деревья
- •Основные понятия и определения
- •Построение бинарного дерева
- •Операции над бинарным деревом
- •Реализация бинарного дерева
- •Реализация основных операций над бинарным деревом
- •Дерево выражения
- •Дерево поиска
- •Операции над деревом поиска
- •Реализация дерева поиска
- •Реализация операций над деревом поиска
- •Сбалансированные деревья
- •Включение в сбалансированное дерево
- •Лабораторная работа 3. Бинарные деревья
- •Тема 4.Графы
- •Основные понятия и определения
- •Граф g7
- •Операции над графом
- •Реализация графа
- •Реализация основных операций над ориентированным графом
- •Обход ориентированного графа
- •Вычисление расстояния между узлами ориентированного графа
- •Лабораторная работа 4. Ориентированные графы
- •Библиографический список
Очередь
Очередью называется упорядоченный набор элементов, которые могут исключаться с одного ее конца (называемого началом очереди), а включаться с другого конца (называемого концом очереди). Каждый элемент очереди характеризуется одним и тем же набором полей. Логическая структура очереди:
|
Исключение |
|
A |
B |
C |
D |
E |
|
Включение |
|
|
|
|
|
|
|
|
|
|
|
|
Начало |
|
Конец |
| ||||
Очередь функционирует по принципу FIFO(FirstIn–FirstOut: «первым пришел – первым исключается»). В реальном мире имеется множество примеров очередей: очередь к кассе магазина, очередь задач, обрабатываемых вычислительной машиной. Каждый элемент очереди может содержать одно или несколько полей, число элементов в очереди не ограничено. Очередь, не содержащая ни одного элемента, называется пустой.
Операции над очередью
Над очередью 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для очереди аналогичны соответствующим операциям для стека.
Дек
Деком (DEQ– от английскогоdouble ended queue, очередь с двумя концами) называется упорядоченный набор элементов, включение и исключение элементов в котором могут осуществляться с любого из двух его концов. Логическая структура дека:
|
Включение Исключение |
|
A |
B |
C |
D |
E |
|
Исключение Включение |
|
|
|
|
|
|
|
|
|
|
|
|
Начало |
|
Конец |
| ||||
Частные случаи дека – дек с ограниченным входом и дек с ограниченным выходом (включение или исключение элементов осуществляется только с одного из концов дека).
Операции над деком
Над деком dмогут быть выполнены все операции, определенные для очередиq, а также добавляются две основные операции:
– включение элемента со значением vв начало дека –Push(d, v);
– исключение элемента из конца дека – Delete(d) и возвращение его в качестве значения функции.
Реализация очереди и дека
Реализация очереди (дека) с помощью динамических переменных:

При этом вводятся две переменные типа указателя на элемент очереди или дека: 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.
