7) Очередь. Функциональная спецификация.
Очередь – структура с одной читающей головкой и одной записывающей головкой, последовательным доступом. Или: Очередь – упорядоченное множество с переменным числом элементов, на которым определены следующие операции: Постановка в очередь нового элемента, проверка пустоты очереди, просмотр первого элемента, извлечение из очереди первого элемента. Типичный пример (как вы уже догадались) – очередь в магазине. Первый пришел, первый ушел. Есть еще стек (последний пришел, первый ушел) и дек (Очередь, в которую можно прийти и уйти с двух сторон).
Функциональная спецификация. Очередь – упорядоченный, одномерный, динамически изменяемый набор элементов, в котором включение новых элементов производится на одном конце, а доступ к элементам и их удаление – на другом конце. Кол-во элементов называется длиной. Элемент может иметь любой доступный тип данных (целый, структурный и т.д.).
8) Очередь. Логическое описание и физическое представление (файл). Вкратце, отображаем структуру очереди на файле. (Пример в книге только на паскале? Садист. Страница 219, кого не устроят мои объяснения). Итак. Обзываем файл в начале программы и создаем функции. Нужно сделать создание файла, проверку на пустоту, вставку элемента, вывод первого элемента очереди, удаление первого элемента. К сожалению, в книге нету нормального описания алгоритма, посему придется только знакомиться с кодом.
(Задолбано.)
9) Очередь. Логическое описание и физическое представление (массив). При реализации очереди на массиве, нужно зафиксировать элемент этого массива. Введем две переменные: первую – для индеса начала очереди, вторую для конца, или точнее – первого свободного элемента очереди.
Есть три
способа реализации:
1) Стратегия
трудоголика: голова фиксируется на
первом элементе, хвост (первый свободный
элемент) постоянно сдвигается в
зависимости от размера очереди. При
извлечении первого элемента – вся
очередь сдвигается.
2) Стратегия
ленивца: Голова и хвост подвижны. При
удалении элемента, мы просто сдвигаем
на голову, при добавлении – сдвигаем
хвост. Как доходим до конца массива –
копируем всю очередь в начало и
переиндексируем голову и хвост на
соответствующие элементы.
3)Стратегия
с кольцевым буфером: у нас есть один
разрывной элемент, он же начало и конец
(альфа и омега), и для индексирования мы
используем операцию mod.
Для массива размером 8, мы обращаемся к
элементу 13 (до которого мы добрались
путем добавления и удаления предыдущих
элементов), мы получим 5-ый элемент. Таким
образом нам не нужно убирать за собой
мусор.
(Я не буду приводить функции. Очень. Много. Места)
10) Очередь. Логическое описание и физическое представление (динамические объекты).
Создаем структуру с типом элемента массива (Тип данных +указатели (как минимум на следующий элемент)) и структуру с указателем на элемент массива. Далее нужно сделать все те же функции, что мы делали раннее. Выделяем память для «головы» (Head *h = (Head*)malloc(sizeof(Head));) И функцию для выделения памяти для каждого элемента (Маллок, плюс приравниваем все указатели к NULL); Функция добавления элемента: берем из функции выделения памяти для элемента указатель на элемент, присваиваем указатели и данные. Функция top: printf(“%d”, h->head->data); Функция удаления: смещаем указатель головы и освобождаем предыдущий элемент с подчисткой указатель. Ну и соответственно IsEmpty, если h->head==NULL – return 1; В принципе, кто писал, тот знает. А кто не писал, тому лучше почитать код одногруппника.
11) Стек. Функциональная спецификация.
Стек, вкратце, сверху положил – сверху взял. Как стопка листов, чтобы добраться до нижнего – нужно взять все верхние. Функции: Добавление элемента, просмотр верхнего, уничтожение верхнего, проверка на пустоту. Стек - очень удобная и быстрая вещь.
Функциональная
спецификация. Тип St или
Стек объектов типа Т, характеризуется
операциями:
12) Стек. Логическое описание.
Мы работаем всегда с последний, верхним элементом стека. Его можно либо посмотреть, либо уничтожить. Стек – рекурсивная структура данных. Мы можем работать с элементами стека, пока он не пуст (за это у нас отвечает функция).
13) Стек. Физическое представление (массив).
Я просто
скопирую код. Он простой.
14) Стек. Физическое представление (динамические объекты).
Начало такое же, как и с очередями. Создаем функции выделения памяти под указатель на вершину стека, под элемент стека. Далее функции pop, top и push, empty, destroy. Первые две описывались в списках. Top – printf(“%d”, h->head->data); Pop – сохраняем верхний элемент, смещаем голову на один элемнет вниз, free верхний элемент. push – выделяем память под элемент, присваиваем указатель к h->head, меняем h->head на новый элемент. IsEmpty – h->head==NULL – return 1. Destroy – пока не IsEmpty – делай pop.
