- •Введение
- •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 - дерева
- •Приложение д Алгоритмы операций для хеш-таблицы с открытой адресацией Алгоритм вставки элемента
- •Алгоритм удаления элемента
- •Алгоритм поиска элемента
1.5. Сопровождение
Разработанный класс для коллекции должен сопровождаться подробной документацией, чтобы его определение и реализацию можно было легко читать, использовать и модифицировать. Документация формируется на всех этапах проектирования коллекции, начиная с разработки АТД и заканчивая процессом отладки. В заключение разработки класса в качестве документации должны быть представлены дополненный и уточнённый формат АТД и сокращённое определение класса для клиентских программ.
АТД «НАДЁЖНЫЙ МАССИВ»
Массив данных указанного типа Т. Массив имеет переменную размерность. При создании массив имеет исходный, минимальный размер size0. Массив может увеличивать и уменьшать свою размерность. Операция индексирования массива выполняет проверку соответствия индекса текущему размеру массива size.
ДАННЫЕ:
Параметры:
Минимальный размер массива size0
Текущий размер массива size
Структура данных:
Динамический массив элементов указанного типа Т – T array[size]
ОПЕРАЦИИ:
Конструктор
Вход: исходный, минимальный размер массива size0 (по умолчанию size0 = 10)
Начальные значения: текущий размер массива size = size0
Процесс: Создание динамического массива T array[size] с размером size = size0
Постусловия: Создан массив с размером size = size0
Опрос размера массива
Вход: нет
Предусловия: нет
Процесс: чтение текущего размера size
Выход: текущий размер size
Постусловия: нет
Изменение размера массива
Вход: новый размер массива sizen
Предусловия: sizen size0,
Процесс: выделение памяти указанного размера sizen, копирование sizeили sizen значений из старого массива в новый массив
Выход: TRUE – массив изменён, FALSE- массив не изменён при невыполнении предусловия
Постусловия:
массив содержит size значений старого массива, если sizen> size,
массив содержит sizen значений старого массива, если sizen< size,
текущий размер массива size = sizen
Операция индексирования
Вход: значение индекса i
Предусловия: 0 i size-1
Процесс: вычисление адреса элемента массива array[i]
Выход: ссылка на элемент массива array[i]
Постусловия: генерация сообщения об ошибке при невыполнении предусловия
КОНЕЦ АТД
Описание класса должно начинаться комментарием о его предназначении.
В разделе данных класса приводятся только те константы, переменные и структуры объекта, которые упомянуты в формате АТД. Помимо указания типов и имен констант, переменных и структур в комментариях должно быть указано их назначение и пределы изменения значений.
Интерфейс класса представляется только прототипами методов, содержащихся в открытой секции объекта. Комментарий для каждого метода содержит сведения о предназначении метода, о смысле всех входных параметров, смысле результатов. Также в комментарии должны быть сформулированы предусловия и постусловия в контексте программной среды объекта и метода.
ОПИСАНИЕ КЛАССА АТД «НАДЁЖНЫЙ МАССИВ»
//Шаблонный класс класс Array реализует АТД «НАДЁЖНЫЙ МАССИВ».
//Массив элементов указанного типа Т с переменной размерностью size.
//При создании массив имеет исходный, минимальный размер size0. (по умолчанию size0. = 10).
//Массив может изменять свой размер size.
//Операция индексирования выполняет проверку соответствия индекса размеру size.
template <class T>
class Array
{
T* array; // массив
int size0; //первоначальный размер массива
int size; //текущий размер массива
public:
Array (int sz0 = 10); //конструктор
//sz0 - исходный размер массива,
//постусловие: создан массив array с размером size = sz0
Array(const Array<T> & A); //конструктор копирования
//&A – ссылка на копируемый объект-массив A,
//постусловие: массив array является копией A.array
~ Array(void); //деструктор
//постусловие: объект уничтожен
int size (); //опрос текущего размера массива
//результат: int – размер массива array
bool Resize(int newsize);//изменение размера массива
//постусловие: массив array имеет размер size = newsize
T& operator [] (int i); //оператор индексирования:
//i -индекс в массиве, 0 i < size
//результат: T& - ссылка на элемент массива array[i]
//постусловие: генерация исключения типа int при i<0,
//при isize
};