Разработать модули для работы с информационно-логическими структурами – стеком, очередью и деком. Модули должны обеспечивать следующие возможности работы со структурами:
На основе базовых операций со структурами необходимо разработать следующие подпрограммы:
Для каждой структуры написать две реализации: на основе динамического массива и на основе списка. К основной программе подключать три модуля (для стека, очереди и дека), при этом основная программа не должна меняться при подключении модуля с другой реализацией той же структуры.
При всех операциях соблюдать правила работы с информационно-логическими структурами – доступ осуществляется только к первому и/или последнему элементу структуры. Для вывода и удаления перекладывать элементы структуры в другую аналогичную структуру.
В стек, очередь и дек вводить одни и те же данные (из одного и того же файла)!
Разработать программу, к которой будут подключаться разработанные модули. Программа должна сделать следующее:
После каждого изменения выводить содержимое структур.
Имена файлов передаются через параметры программы.
Создать стек, очередь и дек, содержащие целые числа в диапазоне от -20 до +60. Из стека и очереди удалить все элементы, кратные 5, из дека удалить элементы, кратные 5, если они при этом находятся на одинаковом расстоянии от краёв дека.
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | stack | Стек | TStack | составная переменная |
info | Информация для добавления в стек | TInfo | составная переменная | |
Выходные данные | stack | Тот же стек после добавления информации | TStack | составная переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | stack | Стек | TStack | составная переменная |
Выходные данные | stack | Тот же стек после удаления информации | TStack | составная переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | stack | Стек | TStack | составная переменная |
Выходные данные | isEmpty | Признак отсутствия (true)/наличия (false) элементов в стеке | boolean | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | name | Имя файла | строка | простая переменная |
Выходные данные | stack | Стек | TStack | составная переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | stack | Стек | TStack | составная переменная |
Подпрограммы для очереди и дека будут аналогичны.
Целые и вещественные числа обязательно надо разделять либо пробелами, либо переводами строки. Символы либо надо разделять переводами строки – в этом случае следует использовать процедуру readln, либо не разделять ничем – в этом случае следует использовать процедуру read.
№ теста | Входные данные (содержимое файла) |
Ожидаемые результаты (после удаления элементов, кратных 5) |
Смысл теста |
---|---|---|---|
1 | 2, 3, -51, -7, 16 |
Стек: 16, -7, 3, 2 Очередь: 2, 3, -7, 16 Дек: 16, 2, 3, -7 |
Нет элементов, удовлетворяющих условию. |
2 | 15, 0, 9, 4, 6, 1, 0, 3, 2 |
Стек: 2, 3, 1, 6, 4, 9 Очередь: 9, 4, 6, 1, 3, 2 Дек: 2, 0, 6, 9, 15, 0, 4, 1, 3 |
Есть элементы, удовлетворяющие условию. В деке нет совпадающих пар. |
3 | 0, 2, 2, 5, 5, 8, 8, 10, 15 |
Стек: 8, 8, 2, 2 Очередь: 2, 2, 8, 8 Дек: 8, 2, 0, 2, 8 |
Есть элементы, удовлетворяющие условию. Первый и последний элементы удовлетворяют условию. В деке есть совпадающие пары. |
4 | -5, 0, 15, -15, 55 |
Стек: Очередь: Дек: -5 |
Все элементы удовлетворяют условию. Количество элементов нечётно, поэтому в деке остаётся один элемент. |
5 | -15, 0, -5, 45 |
Стек: Очередь: Дек: |
Все элементы удовлетворяют условию. Количество элементов чётно, поэтому в деке не остаётся элементов. |
Берём элемент из стека. Если он не удовлетворяет условию, кладём его в другой стек. Таким образом, выбираем все элементы исходного стека. Когда исходный стек станет пуст, перекладываем элементы из дополнительного стека обратно в исходный.
С очередью поступаем аналогично – перемещаем элементы, не удовлетворяющие условию, из исходной в дополнительную очередь, а потом обратно.
Для обработки дека можно использовать либо одну, либо две дополнительные структуры. Берём по элементу с каждой стороны дека. Если хотя бы один из них не удовлетворяет условию, кладём пару элементов либо в один дополнительный дек с разных сторон, либо в разные дополнительные деки. После освобождения исходного дека, перекладываем элементы обратно. Не забывайте, что в деке может оказаться как чётное, так и нечётное количество элементов.
При выводе элементов структуры также перекладываем элементы из одной структуры в другую аналогичную, только в этом случае перекладываем все элементы, а не только те, которые должны остаться.