6.2.1. Реализовать операции с очередью ограниченной длины так,
чтобы количество действий для каждой операции было ограничено
константой, не зависящей от длины очереди.
Введем массив
Содержание: array [0..n-1] of Tи переменные
Первый: 0..n-1, Длина : 0..n.При этом элементами очереди будут
Содержание [Первый+Длина-1],
где сложение выполняется по модулю n. (Предупреждение. Если вместо этого ввести переменные Первый и Последний, значения которых -- вычеты по модулю n, то пустая очередь может быть спутана с очередью из n элементов.)
Операции выполняются так:
Сделать пустой:
Длина := 0; Первый := 0;
Добавить элемент:
{Длина < n} Содержание [(Первый + Длина) mod n] := элемент; Длина := Длина + 1;
Взять элемент:
{Длина > 0} элемент := Содержание [Первый]; Первый := (Первый + 1) mod n; Длина := Длина - 1;
Пуста:
Длина = 0
Очередной:
Содержание [Первый]\
6.2.2. (Сообщил А.Г. Кушниренко) Придумать способ моделирования
очереди с помощью двух стеков (и фиксированного числа переменных
типа T). При этом отработка n операций с очередью (начатых,
когда очередь была пуста) должна требовать порядка n действий.
6.2.3. Деком называют структуру, сочетающую очередь и стек: класть
и забирать элементы можно с обоих концов. Как реализовать дек
ограниченного размера на базе массива так, чтобы каждая операция
требовала ограниченного числа действий?
6.2.4. (Сообщил А.Г. Кушниренко.) Имеется дек элементов типа T
и конечное число переменных типа T и целого типа. В
начальном состоянии в деке некоторое число элементов. Составить
программу, после исполнения которой в деке остались бы те же
самые элементы, а их число было бы в одной из целых переменных.