- •Введение
- •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 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
Литература
-
Альфред Ахо, Джон Э. Хопкрофт, Д. Ульман Структуры данных и алгоритмы. - М. - СПб – Киев: «Вильямс», 2000 г. – 384 с.
-
Н. Вирт Алгоритмы + структуры данных = программы. - М.: «Мир», 1985 г. – 406 с.
-
Фрэнк М. Каррано, Джанет Дж. Причард. Абстракция данных и решение задач на С++. Стены и зеркала. - М. - СПб – Киев: «Вильямс», 2003 г. – 848 с.
-
Д. Кнут. Искусство программирования для ЭВМ. Т.1. Основные алгоритмы. – М: «Мир», 1976 г. (переиздание - М., Изд. "Вильямс", 2000 г.) – 735 с.
-
Д. Кнут. Искусство программирования для ЭВМ. Т.3. Сортировка и поиск. – М: «Мир», 1978 г. (переиздание - М., Изд. Изд. Вильямс", 2000 г.) – 844 с.
-
Т. Кормен, Ч. Лейзерсон, Р. Ривест Алгоритмы. Анализ и построение. - М: «БИНОМ», 2000 г. – 960 с.
-
Кубенский А.А. Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++. – СПб.: БХВ-Петербург, 2004 г. – 464 с.
-
Дж. Макконелл. Анализ алгоритмов. Вводный курс. - М: «Техносфера», 2002 г. – 304 с.
-
Роберт Сэджвик. Фундаментальные алгоритмы на С++. Части 1-4. - М: «DiaSoft», 2001 г. – 688 с.
-
Уильям Топп, Уильям Форд. Структуры данных в С++. – М: «Бином», 2000 г. – 816 с.
-
Хезфилд Р., Кирби Л. Искусство программирования на С. Фундаментальные алгоритмы, структуры данных и примеры приложений. – Киев: «ДиаСофт», 2001г. – 736 с.
-
Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си. – М.: «Финансы и статистика», 2004 г. – 464 с.
Приложение a: Псевдокод. Основные правила и соглашения псевдокода
Чтобы не отвлекаться при изучении алгоритмов на особенности кодирования на конкретном языке программирования, принято вести записи алгоритмов на псевдокоде. Действия алгоритма описываются полуформально. Можно пропустить технические подробности программирования, затеняющие суть алгоритма.
-
Отступ от левого поля указывает на уровень вложенности. Это делает излишним использование блочных скобок ( {} – в С++, begin–end–в Паскале).
-
Циклы while, for, repeat, until и условные операторы if–then–else имеют тот же смысл, что и в С++ и Паскале.
-
Символ начинает комментарий, идущий до конца строки.
-
i←e означает присваивание переменной i значения e,
-
i←j←e означает одновременное присваивание значения e переменной i и j.
-
Индекс массива указывается в квадратных скобках А[i]. Знак “ .. ” выделяет часть массива А[i..j] от i–го до j–го значения.
-
Индекс начинается с 1.
-
Переменные локальны внутри функции.
-
Часто используются объекты, состоящие из нескольких полей, называемых атрибутами. Значение поля записывается как имя поля [имя объекта]. Например, поле left с указателем на левого сына узла дерева t обозначается, как left[t]
-
Переменная, означающая массив или объект, считается указателем на его данные. После присваивания y←x для любого поля f выполняется f[y] = f[x]. Более того, если выполним f[x]←3, то будет и f[y]=3, поскольку после y←x переменные y и x указывают на один объект.
-
Указатель может иметь специальное значение nil.
-
Параметры передаются функциям по значению: вызванная функция получает собственную копию параметров. Изменение параметра внутри функции снаружи не видно.
-
При передаче массивов или объектов функция получает указатель на данные.
Приложение Б:
Алгоритмы внутренней сортировки.
Алгоритм сортировки методом выбора
Selection_Sort (A, n)
-
A - массив
-
n - размерность массива
-
for i1 to n-1
-
do imini
-
for ji+1 to n
-
do if A[j]<A[imin]
-
then iminj
-
tempA[imin]
-
A[imin] A[i]
-
A[i] temp
Алгоритм сортировки методом вставок
Insertion_Sort(A, n)
-
A - массив
-
n - размерность массива
-
for i2 to n
-
do xA[j]
-
ji-1
-
while j>0 and A[j]> x
-
do A[j+1] A[j]
-
jj-1
-
A[j+1] x
Алгоритм обменной сортировки
Bubble_Sort (A, n)
-
A - массив
-
n - размерность массива
-
for i 1 to n-1
-
do for jn down i-1
-
do if A[j-1] < A[j]
-
then temp A[j]
-
A[j] A[j-1]
-
A[j-1] temp
Алгоритм шейкер – сортировки
Sheker_Sort (A,n)
-
A – массив
-
n – размерность массива
-
l 1
-
r n
-
while l < r
-
do for j r down l+1
-
do if A[j-1]>A[j]
-
then temp A[j-1]
-
A[j-1] A[j]
-
A[j] temp
-
k j
-
l k+1
-
for j l to r
-
do if A[j-1]> A[j]
-
then temp A[j-1]
-
A[j-1] A[j]
-
A[j] temp
-
k j
-
r k-1