Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СиАОД.doc
Скачиваний:
54
Добавлен:
27.10.2018
Размер:
759.3 Кб
Скачать

Атд «Стек»

Стек – это специальный тип списка, в котором все вставки и удаления выполняются только на одном конце, называемом вершиной.

Стеки также иногда называют «магазинами», а в англоязычной литературе для обозначения стеков еще используется аббревиатура LIFO (last –in-first-out последний вошел - первый вышел).

Примером стека может служить стопка тарелок в буфете. Взять проще всего верхнюю и положить удобнее наверх.

Стеки часто применяются при реализации операций над текстовыми строками.

АТД семейства «Стек» обычно используют 5 операторов:

  1. MAKENULL(S). Делает стек пустым.

  2. TOP(S). Возвращает элемент из вершины стека.

  3. POP(S). Удаляет элемент из вершины стека. Иногда этот оператор реализуется в виде функции, возвращающей удаляемый элемент.

  4. PUSH(x,S). Вставляет элемент х в вершину стека. Элемент, находившийся ранее в вершине стека, становится элементом, следующим за вершиной.

  5. EMPTY(S). Эта функция возвращает значение true, если стек пустой и false в противном случае.

Поскольку стеки являются частным случаем списков, то реализуются они на практике также как и списки. Однако при их реализации с помощью массивов удобно зафиксировать дно стека (его самый нижний элемент) в самом низу массива (в ячейке с наибольшим индексом) и позволить стеку расти вверх массива (к ячейке с наименьшим индексом). Переменная с именем top будет указывать положение текущей позиции первого элемента стека.

element

1

2

3

4

5

6

7

8

9

10

Атд «Очередь»

Очередь – другой специальный тип списка, в котором элементы вставляются с одного конца, называемого задним, а удаляются с другого, переднего. Очереди также называют «списками типа FIFO» (first-in-first-out, первым вошел – первым вышел). Операторы, выполняемые над очередями аналогичны операторам стеков. Существенное отличие между ними состоит в том, что вставка новых элементов осуществляется в конец списка, а не в начало, как в стеках.

Как и для стеков, любая реализация списков допустима для представления очередей. Однако, учитывая особенность очереди (вставка новых элементов только с одного, заднего конца), можно реализовать оператор вставки более эффективно, чем при обычном представлении списков. Вместо перемещения списка от начала к концу каждый раз при пополнении очереди мы можем хранить указатель (или курсор) на последний элемент очереди.

Т огда пустая очередь, и операции вставки и удаления будут выглядеть так: