Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

Int prior(char a)

{

switch(a)

{

case '*':

case '/':

return 3;

case '-':

case '+':

return 2;

case '(':

return 1;

}

}

Таблица 18.

Пример построения ОПЗ

Вх. cимвол

Стек

Вых строка

(

(

a

(

A

+

(+

A

b

(+

Ab

*

(+*

ab

c

(+*

abc

)

Пусто

abc*+

*

*

abc*+

(

*(

abc*+

a

*(

abc*+a

-

*(-

abc*+a

b

*(-

abc*+ab

)

*

abc*+ab-

/

/

abc*+ab-*

(

/(

abc*+ab-*

d

/(

abc*+ab-*d

-

/(-

abc*+ab-*d

(

/(-(

abc*+ab-*d

a

/(-(

abc*+ab-*da

+

/(-(+

abc*+ab-*da

b

/(-(+

abc*+ab-*dab

*

/(-(+*

abc*+ab-*dab

d

/(-(+*

abc*+ab-*dabd

)

/(-

abc*+ab-*dabd*+

)

/

abc*+ab-*dabd*+-

Конец строки

Пусто

abc*+ab-*dabd*+-/

Приведем пример использования Алгоритма Дейкстры для входной строки (a+b*c)*(a–b)/(d–(a+b*d)). Для удобства отображения стека в таблице «транспонируем» его, т.е. разместим стек в строке, развернув по часовой стрелке на 90 градусов, так чтобы вершина стека располагалась в конце строки справа (табл.18).

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

Очередью (aнгл. queue) называется структура данных, в которой элементы кладутся в конец, а извлекаются из начала. Таким образом, первым из очереди будет извлечен тот элемент, который будет добавлен раньше других. Говорят, что очередь реализует дисциплину обслуживания FIFO (First In – First Out, первым пришел – первым ушел). Очередь можно рассматривать как однонаправленный список, в котором можно удалять только из начала, а добавлять только в конец. Основные операции над очередью – такие же, что и над стеком: включение, исключение, определение размера, очистка, обход, чтение.

Деком (англ. deque – аббревиатура от double-ended queue, двухсторонняя очередь) называется структура данных, в которую можно удалять и добавлять элементы как в начало, так и в конец. Дек хранится в памяти так же, как и очередь. Таким образом, дек может быть и стеком, и очередью, и комбинацией этих структур. Наиболее часто дек представляется структурой с ограничением на вход или выход: дек с ограниченным входом (только одна позиция доступна для добавления элемента) и дек с ограниченным выходом (только одна позиция доступна для взятия элемента из дека). Стандартные операции над деком: включение элемента справа; включение элемента слева; исключение элемента справа; исключение элемента слева; определение размера; очистка.

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