- •Структуры и алгоритмы обработки данных
- •Содержание
- •Введение
- •1. Линейные структуры данных
- •1.1 Линейный список
- •1.2 Стек
- •1.3 Очереди
- •1.3.1 Универсальная очередь неограниченного размера
- •1.3.2.2 Универсальная очередь ограниченного размера
- •2. Нелинейные структуры данных. Бинарные деревья
- •3. Алгоритмы сортировки данных в оперативной памяти
- •3.1 Сортировка массива простым выбором
- •3.2 Сортировка массива вставками (сортировка Шелла)
- •3.3 Сортировка массива обменом (сортировка Хоора)
- •3.4 Генерация массива числовых данных случайным распределением значений элементов
- •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 Задания для выполнения лабораторной работы «Алгоритмы поиска на графе».
- •6.5.1 Поиск кратчайшего пути. Алгоритм Дейкстры Вариант 1
- •Вариант 2
- •6.5.2 Поиск кратчайшего пути. Алгоритм Флойда
- •Вариант 15
- •7. Задания для выполнения контрольной работы
- •Заключение
- •Список литературных первоисточников
1. Линейные структуры данных
1.1 Линейный список
Линейные структуры данных – связанный список, стек и очередь.
Связанный список – набор объектов автореферентного класса, называемых узлами, соединенных указателями-связками.
Автореферентный класс – класс, содержащий элемент-указатель, ссылающийся на объект того же классового типа.
Доступ к связанному списку осуществляется через указатель (ключ) на первый узел списка, обращение к последующему узлу осуществляется через указатель, хранящийся в предыдущем узле. Указатель-связка в последнем узле списка устанавливается в нуль, который отмечает конец списка. Данные сохраняются динамически – узлы создаются по мере необходимости. Узел может содержать данные любого типа, включая объекты других классов. Если узлы содержат указатели базового класса на объекты базового или производного классов, связанных отношением наследования, то можно создавать из таких узлов связанный список и полиморфно обрабатывать объекты посредством вызова виртуальных функций.
Над списками выполняются операции:
- формирование списка (создание первого элемента);
- добавление элемента в конец списка;
- чтение элемента с заданным ключом;
- вставка элемента в заданное место списка (до или после элемента с заданным ключом);
- удаление элемента с заданным ключом;
- упорядочивание списка по ключу.
Способы реализации списков:
- односвязный список – список начинается с указателя на первый узел. Узел содержит указатель на последующий узел. Заканчивается указателем, имеющим значение 0. Односвязный список можно проходить в одном направлении.
- циклический односвязный список – узел начинается с указателя на первый узел. Каждый узел содержит указатель на следующий узел. Последний узел не содержит нулевого указателя и ссылается на первый узел.
- двусвязный список – список, включающий два начальных указателя. Один указывает на первый элемент списка и позволяет пройти список от начала к концу, а второй указывает на последний элемент и позволяет пройти список от конца к началу. Каждый узел имеет прямой указатель на следующий узел списка в прямом направлении и обратный указатель на следующий узел в обратном направлении.
- мультисписки – структуры данных, состоящие из элементов, которые принадлежат нескольким спискам, не повторяясь в нескольких экземплярах. Элементы имеют указатели для каждого списка, которому они принадлежат. Списки могут быть линейными и циклическими, однонаправленными и двунаправленными.
Связные списки имеют преимущества перед массивами:
Связанные списки являются динамическими;
Связанные списки заполняются до отказа, когда памяти в системе недостаточно для удовлетворения запросов динамического выделения памяти;
Связанный список производит эффективную операцию вставки/удаления в любом месте списка.
1.2 Стек
Стек – частный случай однонаправленного списка, добавление элементов и выборка выполняются с одного конца, называемого вершиной стека. Другие операции со стеком не определены. При выборе элемент исключается из стека. Стек реализует принцип обслуживания LIFO (last in – first out, последний пришел – первым ушел). Стеки применяются в системном программном обеспечении, компиляторах, в рекурсивных алгоритмах.