Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
16
Добавлен:
27.09.2019
Размер:
305.64 Кб
Скачать

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. Перечисленные операции имеют след. св-ва при

1. ПУСТО(СОЗДАТЬ) - true

СОЗДАТЬ всегда порождает пустую очередь;

2. ПУСТО(В ОЧЕРЕДЬ (q,t)) = false

3. ПЕРВЫЙ (В ОЧЕР Е Д Ь (С О 3 Д АТЬ, £)) - t.

Внесенный в пустую очередь элемент всегда становится ее первым элементом.

4. Последовательность действий:

Заносящая во вновь созданную пустую очередь сначала элемент t1, а зачем элемент t2, а затем извлекающая из нее 2 элемента сохраняет их порядок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]