- •2 Статические и динамические объекты программ.
- •6 Вектор. Функциональная спецификация. Логическое описание и физическое представление.
- •14 Стек. Физическое представление (динамические объекты).
- •8 Очередь. Логическое описание и физическое представление (файл).
- •9 Очередь. Логическое описание и физическое представление (массив).
- •10 Очередь. Логическое описание и физическое представление (динамические объекты).
- •61 Обьектно-ориентированное программирование.
- •11 Стек. Функциональная спецификация
- •12 Стек. Логическое описание.
- •17 Линейный список. Физическое представление. Итераторы.
- •Void Create(List *l){ //создание списка
- •If(!res.Node) //если не удалось выделить память (массив заполнен)
- •19 Линейный список. Физическое представление (динамические объекты).
- •29 Рекурсивные структуры данных и их связь с алгоритмической рекурсией
- •1 Уровни описания структур данных.
- •Деревья. Двоичные деревья.
- •23 Двоичное дерево. Функциональная спецификация
- •24 Двоичное дерево. Логическое описание. Построение и визуализация
- •27 Особенности представления и обработки деревьев общего вида (преобразование к двоичному,...)
- •28 Деревья выражений
- •33 Поиск по образцу в последовательностях и таблицах.
- •34 Алгоритм Кнута-Морриса-Пратта
- •37 Таблицы с прямым доступом.
- •43 Турнирные сортировки.
- •46 Сравнение методов сортировки.
- •50 Абстрактные типы данных. Пример модуля лтд очередь.
- •52 Типизация языка программирования. Контроль типов.
- •53 Средства ослабления типового контроля в языке Паскаль. Преобразование и передача типов.
- •54 Полиморфизм операций, отношений и процедур. Родовые модули.
- •41 Обменные сортировки
6 Вектор. Функциональная спецификация. Логическое описание и физическое представление.
Вектор является последовательностью переменной длины, и время доступа к элементам этой последовательности постоянно и не зависит от длины последовательности. Количество элементов вектора не фиксировано и всегда может быть изменено. Вектор с 0 компонент называется пустым (но аналогии с пустым файлом).
В математике операции, такие как сложение и скалярное произведение, можно производить только с векторами равной размерности (длины). Поэтому длина является важной характеристикой вектора. Обозначим через In множество допустимых индексов вектора, I = 0,..., n-1. Мощность этого множества есть ни что иное как длина вектора. В качестве индекса первого элемента берется 0, т. к. это удобно для реализации вектора в ЭВМ.
Для доступа к компоненте вектора необходимо прибавить к адресу блока размер одной компоненты, умноженной на ее индекс. Если индексация ведется не с 0, то дополнительно необходимо провести сложение индекса с некоторым числом, что замедляет доступ.
Описание самого вектора: Определение его длины: По окончанию работы удаление вектора и возврат памяти ОС:
typedef struct {
T* data;
int size;
} Vector;
void Create(Vector* v. int sz) {
v—>size = sz;
v—>data = malloc(sizeof(T) * v—>size) );
}
void Destroy (Vector* v) {
v—>size — 0;
free (v— > data);
14 Стек. Физическое представление (динамические объекты).
Стек представляется как линейный список, в котором включение элементов всегда производятся в начала списка, а исключение - также из начала. Для представления его нам достаточно иметь один указатель - top, который всегда указывает на последний записанный в стек элемент. В исходном состоянии (при пустом стеке) указатель top - пустой. Процедуры StackPush и StackPop сводятся к включению и исключению элемента в начало списка. Обратите внимание, что при включении элемента для него выделяется память, а при исключении - освобождается.
Описание элементов стека аналогично описанию элементов линейного однонаправленного списка. Поэтому объявим стек через объявление линейного однонаправленного списка:
struct Stack {
Single_List *Top;//вершина стека
};
. . . . . . . . . .
Stack *Top_Stack;//указатель на вершину стека
Основные операции, производимые со стеком:
создание стека;
печать (просмотр) стека;
добавление элемента в вершину стека;
извлечение элемента из вершины стека;
проверка пустоты стека;
очистка стека.
7. Очередь. Функциональная спецификация. Очередь — это структура с одной читающей головкой и одной записывающей головкой, последовательным доступом и неразрушающей записью [72]. Точнее, очередью называется упорядоченное множество с переменным (возможно, нулевым) числом элементов, на котором определены следующие операции: 1.Постановка в очередь нового элемента; 2.Проверка пустоты очереди; 3.Просмотр 1го элемента, если он есть; 4. Извлечение из очереди ее 1го элемента, если очередь не пуста. Очереди применяют к 2м классам задач: Для моделирования реальных очередей; Решение собственных задач информатики, в частности в области операционных систем ЭВМ.
Количество компонент очереди называется ее длиной. Однако длина очереди в определении не фиксируется и может быть вычислена «вручную» последовательным перебором всех се компонент. То есть это неэлементарная составная операция.
Компонента очереди может иметь любой тип, простой или составной.
Тип QT (очередь объектов типа Т) характеризуется следующими операциями:
0 -> QT
QT -> boolean
QT xT->QT
QT ->QT
QT -> T
QT -> N
QT -> 0
Перечисленные операции имеют след. св-ва при
1. ПУСТО(СОЗДАТЬ) - true
СОЗДАТЬ всегда порождает пустую очередь;
2. ПУСТО(В ОЧЕРЕДЬ (q,t)) = false
3. ПЕРВЫЙ (В ОЧЕР Е Д Ь (С О 3 Д АТЬ, £)) - t.
Внесенный в пустую очередь элемент всегда становится ее первым элементом.
4. Последовательность действий:
Заносящая во вновь созданную пустую очередь сначала элемент t1, а зачем элемент t2, а затем извлекающая из нее 2 элемента сохраняет их порядок.