- •3.Жизненный цикл программы. Критерии качества программы.
- •5.Разработка проекта программной системы
- •6.Схемы алгоритмов, данных, программ
- •7.Символы данных. 8.Символы процесса. Все это говно не копируется со схемам, 9.Символы линий.
- •13.Алфавит языка Паскаль.
- •14.Грамматика для описания языка, синтаксические диаграммы
- •15.Структура программы на языке Паскаль
- •18.Стандартные типы данных
- •19.Порядковые типы данных
- •20.Данные логического типа(булевского)
- •21.Данные целого типа
- •22.Данные символьного типа
- •29.Строки
- •50. Проектирование модульных программ. Модуляризация
- •51. Связность модуля
- •53. Алгоритмы сортировки массива
- •54. Алгоритмы поиска
- •55. Динамические структуры данных
- •56. Линейные списки
- •57. Стек, очередь, дек
- •58. Деревья
57. Стек, очередь, дек
Стеком (англ. stack) называется хранилище данных, в котором можно работать только с одним элементом: тем, который был добавлен в стек последним. Говорят, что стек реализует дисциплину обслуживания LIFO (Last In – First Out, последним пришел – первым ушел). Физически стек может быть реализован на основе массива или на основе односвязанного линейного списка, в котором все операции осуществляются только с началом списка.
Стек должен поддерживать следующие операции: push – добавить (положить) в конец стека новый элемент; pop – извлечь из стека последний элемент;
190
isEmpty – проверка, пуст ли стек; top – узнать значение последнего элемента (не удаляя его); size – узнать количество элементов в стеке; clear – очистить стек (удалить из него все элементы).
Последний элемент в стеке называется верхушкой стека.
На языке Паскаль стек можно описать с помощью следующих структур:
Type Point=^elsteka; // указатель на элемент стека Elsteka=record // элемент стека это:
Info:char; // информационная часть – любой тип паскаля, в т.ч. записи
Pred:point; //указатель на предыдущий (более нижний) элемент стека. End;
Стек имеет очень широкое применение в программировании. Особенно часто он используется при решении системных задач, задач компиляции и анализа выражений. Рассмотрим наиболее характерный пример использования стека при переводе выражений в обратную польскую запись.
Обратная польская запись (ОПЗ) – это способ записи выражений (как правило алгебраических) в так называемом постфиксном виде, т.е. в таком виде, когда сначала записываются все операнды, а потом выполняемые над ними операции. ОПЗ как правило используется в трансляторах и компиляторах для преобразования выражений в машинный код и их вычисления, а также для анализа и трансляции синтаксических конструкций языка к виду, удобному для генерации машинного кода. Особенность выражения (в более общем виде программы), написанного в ОПЗ, заключается в том, что вычислить это выражение (перевести программу в машинный код) можно одним проходом слева направо фактически символ за символом, операция за операцией, получая значение выражения. Пример: (a+b)*(c/a*c- c*d) Представим это выражение в постфиксном виде: ab+cac*ed*-/+
|
NULL |
191
Очередью (aнгл. queue)) называется структура данных, в которой элементы кладутся в конец, а извлекаются из начала. Таким образом, первым из очереди будет извлечен тот элемент, который будет добавлен раньше других. Говорят, что очередь реализует дисциплину обслуживания FIFO (First in -- first out, первым пришел -- первым ушел).
Очередь можно рассматривать как однонаправленный список, в котором можем удалять только из начала, а добавлять только в конец:
Деком (англ. deque – аббревиатура от double-ended queue, двухсторонняя очередь) называется структура данных, в которую можно удалять и добавлять элементы как в начало, так и в конец. Дек хранится в памяти так же, как и очередь.
Еще одной разновидностью этих структур данных является дек. Дек это список, у которого обе позиции: начало и конец списка доступны для добавления и взятия элемента. Таким образом, дек может быть и стеком, и очередью, и комбинацией этих структур. Наиболее часто дек представляется структурой с ограничением на вход или выход: дек с ограниченным входом (только одна позиция доступна для добавления элемента) и дек с ограниченным выходом (только одна позиция доступна для взятия элемента из дека).
Система команд дека:
push_front
Добавить (положить) в начало дека новый элемент
push_back
Добавить (положить) в конец дека новый элемент
pop_front
Извлечь из дека первый элемент
pop_back
Извлечь из дека последний элемент
front
back
size
clear
