
- •Алгоритмы и структуры данных
- •231000.62 – «Программная инженерия»
- •Содержание
- •Введение
- •1. Линейные структуры данных
- •1.1. Линейный список
- •1.2. Стек
- •1.3. Очереди
- •1.3.1. Универсальная очередь неограниченного размера
- •1.3.2. Универсальная очередь ограниченного размера
- •2. Нелинейные структуры данных. Бинарные деревья
- •3. Алгоритмы сортировки данных в оперативной памяти
- •3.1. Сортировка массива простым выбором
- •3.2 Сортировка массива вставками (сортировка Шелла)
- •3.3 Сортировка массива обменом (сортировка Хоара)
- •3.4 Сортировка с помощью дерева (пирамиды)
- •3.5 Генерация массива числовых данных случайным распределением значений элементов
- •4. Внутренний поиск данных в таблице
- •1. Последовательный поиск.
- •4.1. Последовательный поиск
- •4.2 Логарифмический (бинарный ) поиск
- •4.3. Поиск с использованием перемешанной таблицы (хэш-таблицы)
- •5. Алгоритмы поиска на графах
- •5.1. Поиск кратчайшего пути. Алгоритм Дейкстры
- •. Поиск кратчайшего пути. Алгоритм Флойда
- •6. Задания для выполнения лабораторных работ
- •6.1. Задания для выполнения лабораторной работы №1 «Линейные структуры данных» Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •6.2 Задания для выполнения лабораторной работы №2 «Нелинейные структуры данных. Бинарные деревья» Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •6.3. Задания для выполнения лабораторной работы №3 «Алгоритмы сортировки данных в оперативной памяти» Вариант 1
- •6.4. Задания для выполнения лабораторной работы №4 «Внутренний поиск данных в таблице» Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •6.5.1. Поиск кратчайшего пути. Алгоритм Дейкстры
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •6.5.2. Поиск кратчайшего пути. Алгоритм Флойда
- •Вариант 15
- •7. Курсовая работа
- •7.3.1. Назначение, цели и задачи курсовой работы
- •7.3.2. Требования к курсовой работе
- •7.3.2.1. Требования к функциональным характеристикам
- •7.3.2.2. Требования к эксплуатационным характеристикам
- •7.3.2.3. Требования к программному обеспечению
- •7.3.2.4. Требования к содержанию курсовой работы
- •7.3.3. Варианты заданий курсовой работы
- •Заключение
- •Список литературы
- •231000.62 – «Программная инженерия»
1.2. Стек
Стек – частный случай однонаправленного списка, добавление элементов и выборка выполняются с одного конца, называемого вершиной стека. Другие операции со стеком не определены. При выборе элемент исключается из стека. Стек реализует принцип обслуживания LIFO (last in – first out, последний пришел – первым ушел). Стеки применяются в системном программном обеспечении, компиляторах, в рекурсивных алгоритмах.
1.3. Очереди
Очередь – частный случай однонаправленного списка. Добавление элементов выполняется в один конец, а выборка – из другого конца. Другие операции с очередью не определены. При выборке элемент исключается из очереди. Очередь реализует принцип обслуживания FIFO (first in - first out, первым пришел – первым ушел).
Над очередью определены три операции:
- занесение элемента в очередь;
- выбор элемента из очереди;
- просмотр элементов очереди.
При выборе элемента из очереди он исключается. В очереди доступны левый и правый конец, в которые можно заносить или выбирать элементы.
В программировании очередь применяется при моделировании, диспетчеризации задач операционной системой, буферизованном вводе/выводе.
1.3.1. Универсальная очередь неограниченного размера
Универсальная очередь неограниченного размера строится на базе двунаправленного линейного списка с размещением элементов в динамической памяти и не имеет ограничений по размеру. Недостаток очереди неограниченного размера – повышенный расход памяти.
1.3.2. Универсальная очередь ограниченного размера
Универсальная очередь ограниченного размера реализуется на базе массива. Для каждого элемента очереди хранится последняя информация. Связи между элементами универсальной очереди ограниченного размера и указателями на концы очереди определяются индексами массива [4; 5; 6].
2. Нелинейные структуры данных. Бинарные деревья
Бинарные деревья – динамическая структура данных, состоящая из узлов, каждый из которых содержит данные и не более двух ссылок на поддеревья. Корень дерева – начальный узел дерева. Лист дерева – узел, не имеющий поддеревьев. Предки – исходящие узлы, потомки – входящие узлы. Высота дерева – количество уровней, на которых располагаются узлы.
Дерево поиска – дерево, у которого для каждого узла все ключи левого поддерева меньше ключа этого узла, а все ключи правого поддерева больше ключа этого узла. В дереве поиска можно найти элемент по ключу, двигаясь от корня и переходя на левое или правое поддерево в зависимости от значения ключа в каждом узле. Поиск по ключу эффективнее поиска по списку, поскольку время поиска определяется высотой дерева. Высота дерева пропорциональна двоичному логарифму количества узлов.
Дерево является рекурсивной структурой данных. Действия с деревьями описываются рекурсивными алгоритмами. Деревья поиска применяются для сортировки значений. При обходе дерева узлы не удаляются.
Для бинарных деревьев определены операции:
- включение узла дерева;
- поиск по дереву;
- обход дерева;
- удаление узла.