- •Введение
- •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 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
Рекурсивный алгоритм вставки элемента в rb – дерево
RB_Insert(root, k, data)
1root-корень RB-дерева
2 k –ключ нового элемента
3 data – данные нового элемента
3 root ← RB_Insert1(root, k, data, 0, ins)
4 color [root] ← BLACK
5 return ins
RB_Insert1(t, k, data, s, inserted)
1t-корень дерева/поддерева
2 k –ключ нового элемента
3 data – данные нового элемента
4s- тип родителя(левый-0/правый-1)
5iserted – возвращаемый признак вставки
6 if k = key[t]
7 then inserted ← FALSE
8 return t
9 if t = nil
10 then t ← Create_RB_Node(k, data)
11 color[t] ← RED
12 inserted ← TRUE
13 return t
14 if color[left[t]] = RED and color[right[t]] = RED
15 then color[t] ← RED
16 color[left[t]] ← color[right[t]] ← BLACK
17 if k < key[t]
18 then left[t] ← RB_Insert1(left[t], k, data,0, ins)
19 if color[t] = RED and color[left[t]] = RED and s = 1
20 then t ← R(t)
21 if color [left[t]] = RED and color [left[left[t]]] = RED
22 then t ← R(t)
23 color[t] ← BLACK
24 color[right[t]] ← RED
25 else right[t] ← RB_Insert1(right[t], k, data,1, ins)
26 if color[t] = RED and color[right[t]] = RED and s = 0
27 then t ← L(t)
28 if color[right[t]] = RED and color[right[right[t]]] = RED
29 then t ← L(t)
30 color[t] ← BLACK
31 color[left[t]] ← RED
32 inserted ← ins
33 return t
Итеративный алгоритм вставки элемента в rb – дерево
It_RB_Insert(root, k, data)
1root-корень дерева
2 k –ключ нового элемента
3 data – данные нового элемента
4 if root = tnil tnil – фиктивный узел RB-дерева
5 then root ← Create_RB_Node(k, data)
6 color[root] ← BLACK
7 return TRUE
8 t ← root
9 while t ≠ tnil
10 do
11 pred ← t
12 if k = key[t]
13 then return FALSE
14 if k < key[t]
15 then t ← left[t]
16 else t ← right[t]
17 if k < key[pred]
18 then t ← left[pred] ← Create_RB_Node(k, data)
19 else t ← right[pred] ← Create_RB_Node(k,data)
20 color[t] ← RED
21 while t ≠ root and color[p[t]] = RED
22 do if p[t] = left[p[p[t]]]
23 then y ← right[p[p[t]]]
24 if color[y]=RED случай 1
25 then color[p[t]] ← color[y] ← BLACK
26 color[p[p[t]]] ← RED
27 t ← p[p[t]]
28 else if t = right[p[t]] случай 2
29 then t ← p[t]
30 It_L(root, t)
31 color[p[t]] ← BLACK случай 3
32 color[p[p[t]]] ← RED
33 It_R(root, p[p[t]])
34 else симметричный текст (строки 23 – 33)с заменой left на right
35 конец цикла
36 color[root] ← BLACK
37 return TRUE
It_L (root, t)
1 x ← right[t]
2 right[t] ← left[x]
3 if left[x] ≠ tnil tnil – фиктивный узел RB-дерева
4 then p[left[x]] ← t
5 p[x] ← p[t]
6 if p[t] = tnil
7 then root ← x
8 else if t = left[p[t]]
9 then left[p[t]] ← x
10 else right[p[t]] ← x
11 left[x] ← t
12 p[t] ← x