- •Введение
- •1. Технология проектирования и реализации коллекций данных.
- •1.1. Постановка задачи.
- •1.2. Разработка структур данных и алгоритмов
- •1.3. Кодирование
- •1.4. Отладка и тестирование
- •1.5. Сопровождение
- •2. Лабораторная работа «Сортировка коллекции»
- •2.1. Алгоритмы внутренней сортировки
- •2.2. Задание к лабораторной работе
- •2.1.1. Варианты заданий
- •2.1.2. Методические указания к выполнению задания
- •2.3. Контрольные вопросы и упражнения.
- •3. Лабораторная работа «Коллекция данных - список».
- •3.1. Структуры списков
- •3.2. Задание к лабораторной работе
- •3.2.1. Варианты заданий:
- •3.2.2. Методические указания к выполнению задания
- •3.3. Контрольные вопросы и упражнения.
- •4. Лабораторная работа «Коллекция данных - дерево поиска».
- •4.1. Структуры bst - деревьев
- •4.2. Задание к лабораторной работе
- •4.2.1. Варианты задания
- •4.2.2. Методические указания к выполнению задания:
- •4.3. Контрольные вопросы и упражнения.
- •5. Лабораторная работа «Коллекция данных - сбалансированное дерево поиска»
- •5.1. Структуры сбалансированных деревьев
- •5.2. Задание к лабораторной работе
- •5.2.1. Варианты заданий:
- •5.2.2. Методические указания к выполнению задания
- •5.3. Контрольные вопросы и упражнения.
- •6. Лабораторная работа «Коллекция данных - хеш – таблица»
- •6.1. Функции хеширования
- •6.2. Разрешение коллизий и структуры хеш-таблиц
- •6.3. Трудоёмкость операций
- •6.4. Задание к лабораторной работе
- •6.4.1. Варианты заданий:
- •6.4.2. Методические указания к выполнению задания
- •6.5. Контрольные вопросы и упражнения.
- •Литература
- •Приложение a: Псевдокод. Основные правила и соглашения псевдокода
- •Алгоритм сортировки Шелла
- •Алгоритм пирамидальной сортировки
- •Рекурсивный алгоритм сортировки разделением
- •Итеративный алгоритм сортировки разделением
- •Рекурсивный алгоритм сортировки слиянием
- •Итеративный алгоритм сортировки слиянием
- •Рекурсивный алгоритм поразрядной msd-сортировки
- •Итеративный алгоритм поразрядной lsd-сортировки
- •Итеративный алгоритм вставки элемента в bst – дерево
- •Рекурсивный алгоритм удаления элемента из bst – дерева
- •Алгоритм вставки элемента в корень bst – дерева
- •Алгоритм поиска предыдущего по значению ключа узла bst – дерева
- •Алгоритм поиска k –го по значению ключа узла в bst – дереве
- •Алгоритм разбиения дерева на части
- •Алгоритм удаления из bst-дерева на основе объединения поддеревьев
- •Алгоритм объединения bst – деревьев
- •Алгоритм удаления элемента из рандомизированного дерева
- •Алгоритм вставки элемента в avl-дерево
- •Рекурсивный алгоритм вставки элемента в rb – дерево
- •Итеративный алгоритм вставки элемента в rb – дерево
- •Итеративный алгоритм удаления элемента из rb – дерева
- •Алгоритм вставки элемента в 2-3 - дерево
- •Алгоритм удаления элемента из 2-3 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
Hash_Insert (T, k, data)
-
T[{state, key, data}] – массив хеш-таблицы
-
state[T[j]] – состояние ячейки таблицы (free / busy / deleted)
-
key[T[j]] – ключ поиска элемента таблицы
-
data[T[j]] – данные элемента таблицы
-
i← 0
-
pos ← -1
-
repeat j ← h(k, i)
-
if state[T[j]] = deleted
-
then pos ← j
-
if key[T[j]] = k
-
then return FALSE
-
i ← i+1
-
until i = m or state[T[j]] = free
-
if i = m and pos = -1
-
then return FALSE
-
if pos = -1
-
then pos ← i
-
key[T[pos]] ← key
-
data[T[pos]] ← data
-
state[T[j]] ← busy
-
return TRUE
Алгоритм удаления элемента
Hash_Delete (T, k)
-
T[{state, key, data}] – массив хеш-таблицы
-
state[T[j]] – состояние ячейки таблицы (free / busy / deleted)
-
key[T[j]] – ключ поиска элемента таблицы
-
data[T[j]] – данные элемента таблицы
-
i← 0
-
repeat j← h(k, i)
-
if key[T[j]] = k
-
then state[T[j]] ← deleted
-
return TRUE
-
i← i + 1
-
until state[T[j]] = free или i=m
-
return FALSE
Алгоритм поиска элемента
Hash_Search (T, k)
-
T[{state, key, data}] – массив хеш-таблицы
-
state[T[j]] – состояние ячейки таблицы (free / busy / deleted)
-
key[T[j]] – ключ поиска элемента таблицы
-
data[T[j]] – данные элемента таблицы
-
i← 0
-
repeat j← h(k, i)
-
if key[T[j]] = k
-
then return data[T[j]]
-
i← i + 1
-
until state[T[j]] = free или i=m
-
return nil
ОГЛАВЛЕНИЕ
Введение 3
1. Технология проектирования и реализации коллекций данных. 3
1.1. Постановка задачи. 4
1.2. Разработка структур данных и алгоритмов 7
1.3. Кодирование 15
1.4. Отладка и тестирование 20
1.5. Сопровождение 23
2. Лабораторная работа «Сортировка коллекции» 27
2.1. Алгоритмы внутренней сортировки 27
2.2. Задание к лабораторной работе 34
2.3. Контрольные вопросы и упражнения. 37
3. Лабораторная работа «Коллекция данных - список». 39
3.1. Структуры списков 39
3.2. Задание к лабораторной работе 44
3.3. Контрольные вопросы и упражнения. 47
4. Лабораторная работа «Коллекция данных - дерево поиска». 49
4.1. Структуры BST - деревьев 51
4.2. Задание к лабораторной работе 53
4.3. Контрольные вопросы и упражнения. 57
5. Лабораторная работа «Коллекция данных - сбалансированное дерево поиска» 59
5.1. Структуры сбалансированных деревьев 59
5.2. Задание к лабораторной работе 65
5.3. Контрольные вопросы и упражнения. 69
6. Лабораторная работа «Коллекция данных - хеш – таблица» 71
6.1. Функции хеширования 72
6.2. Разрешение коллизий и структуры хеш-таблиц 74
6.3. Трудоёмкость операций 78
6.4. Задание к лабораторной работе 79
6.5. Контрольные вопросы и упражнения. 84
Литература 85
Приложение A: 86
Псевдокод. Основные правила и соглашения псевдокода 86
Приложение Б: 88
Алгоритмы внутренней сортировки. 88
Приложение В 98
Алгоритмы операций для BST – дерева 98
Приложение Г 110
Алгоритмы операций для сбалансированных деревьев. 110
Приложение Д 129
Алгоритмы операций для хеш-таблицы с открытой адресацией 129