- •1.Алгоритм, атд, структура. Анализ алгоритмов.
- •2. Линейные структуры данных
- •3.Деревья и леса
- •4. Сортировка данных
- •1. Пирамидальная сортировка
- •2. Сортировка слиянием
- •2. Бинарный поиск в упорядоченном массиве
- •3. Быстрая сортировка Хоара
- •6. Поиск
- •1. Последовательный (линейный) поиск
- •1. Бинарные деревья поиска
- •3. Сильноветвяшнеся деревья
- •5. Графы
- •7. Алгоритмы исчерпывающего поиска
2. Линейные структуры данных
К линейным структурам данных относятся различные виды линейных списков.
Линейный список представляет собой такой способ организации совокупности элементов одного типа, при котором, каждый элемент, кроме первого, имеет одного предшественника и каждый элемент, кроме последнего, имеет одного преемника.
Стек (stack) — это специальный тип списка, в котором все вставки и удаления элементов выполняются только на одном конце, называемом вершиной (top). Такой метод доступа обозначается аббревиатурой LIFO (iast-in-first-ош — последним пришел — первым вышел).
1. Создание пустого стека — операция Create ;
2. Проверка стека на наличие в нем хотя бы одного элемента — предикат (логическая функция) IsNull.
3. Получение элемента из вершины непустого стека — операция Тор;
4. Удаление элемента с вершины непустого стека (элемент выталкивается из стека) — операция Pop;
5. Вставка значения х в вершину стека (элемент заталкивается в стек) — операция Push.
Очередь (queue) - это другой специальный тип списка, где элементы вставляются в конец списка, называемый хвостом (tail), а удаляются из начала списка, называемого головой (head). Очереди также называют "списками типа FIFO" (first-in-first-out: первым вошел — первым вышел). Операции, выполняемые с очередями, аналогичны операциям со стеками.
Деки. Иногда используют списки, в которых вставка и удаление элементов выполняются с обоих концов. Такой список называется деком. (сокращение от английского double ended queue-очередь с двумя концами).
Непрерывная реализация стека с помощью массива
Ссылочная реализация стека динамической памяти
Непрерывная реализация очереди с помощью массива
Ссылочная реализация очереди в динамической памяти
3.Деревья и леса
Дерево (tree) — конечное множество Т одного или более узлов (nodes) со следующими свойствами:
1. Существует один выделенный узел, называемый корнем (root) этого дерева Т. Дерево может состоять и из одного корня.
2. Остальные узлы (если они есть) распределены среди к непересекающихся множеств Tl. Т2. .... Тк. и каждое их этих множеств, в свою очередь, является деревом. Деревья Tl. Т2..... Тк называются поддеревьями (subtrees) этого корня.
Из этого определения следует, что каждый узел дерева является корнем некоторого другого дерева (поддерева).
Совокупность нескольких непересекающихся деревьев называется лесом (forest—иногда переводится как бор). Например, все потомки одного узла дерева образуют лес.
Способы представления деревьев
1. Графическое изображение дерева
2.Уступчатый список.
3. Десятичная система обозначений Дьюи
4. Скобочная запись
5.
Бинарное (двоичное) дерево — особый вил дерева, в котором каждый узел имеет не более двух поддеревьев, причем в случае одного поддерева следует различать левое и правое поддерево.
Наиболее понятным и естественным вариантом для бинарных деревьев является ссылочная реализация. Учитывая тот факт, что в бинарном дереве каждый узел содержит не более двух сыновей, причем левого и правого сына следует различать, в указующей части каждого узла хранятся ровно две ссылки — на левое и правое поддерево. При этом бинарное дерево полностью определено указателем на его корень.
1. Ссылочная реализация бинарного дерева на основе указателей. При этом каждый узел описывается структурой, которая содержит, кроме данных, указатели на левого и правого сына. Пустому дереву, как обычно, соответствует пустой указатель NULL, все функции-селекторы обязательно проверяют дерево на пустоту.
2. Ссылочная реализация на основе массива. каждый узел можно представить как структуру (запись), в которой хранятся данные и два индекса— ссылка на левого и правого сына. Все узлы дерева размещаются в одном массиве, размеры которого подбираются таким образом, чтобы в нем поместились все узлы и осталось достаточно свободных элементов для добавления новых узлов.
