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

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.

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