И очередь, и стек могут быть представлены и реализованы в программе разнообразными способами, но мы остановимся на самом простом - представлении очереди и стека с помощью массива элементов.
Очевидно, что для стека достаточно иметь дополнительно к массиву ОДНУ переменную (обозначим ее для определенности Top), которая обычно называется ВЕРШИНА СТЕКА. В начале работы программы этой переменной присваивается значение 0.
Top := 0; И это означает, что стек в данный момент пуст.
Занести в стек элемент Х это значит выполнить 2 действия:
Top:=Top+1; Увеличить на 1 значение переменной Top
Stek[Top] := X; Поместить в массив Stek по индексу Top элемент X
Взять элемент из стека в переменную Y - это значит выполнить другие 2 действия:
Y:= Stek[Top];Взять элемент из массива Stek в переменную Y
Top := Top - 1; Уменьшить на 1 значение переменной Top
Заметим, что увеличение и уменьшение переменной Top ровно на 1 могут быть в Паскале выполнены также с помощью специальных функций Inc(Top); эквивалентно Top := Top + 1; и Dec(Top); эквивалентно Top := Top - 1;
Обычно для большей наглядности и читабельности программ операции работы со стеком и очередью выделяются в специальные процедуры и функции : например :
... Stek : array [1..80] of char; { Стек на 80 символов } ... procedure Put(c:char); { Занести символ в стек } begin Inc(Top); { Изменить вершину стека } Stek[Top] := c; { Поместить символ в стек } end; procedure Get(var x:char; var StekEmpty: boolean); { Взять из стека } begin StekEmpty := Top=0; { Стек пустой ?} If not StekEmpty then x := Stek[Top]; { Если нет взять символ из стека } end; procedure Delete; { Удалить символ из стека } begin Dec(Top); { Уменьшить на 1 вершину стека } end;
Рис. 2. Процедуры работы со стеком символов
При этом размерность массива под стек определяется максимальным количеством элементов, которое предполагается помещать в стек и типом хранимых в стеке элементов.
Понятно, что стек может иметь в качестве своих элементов не только символы. Можно заводить в программе стеки слов, точек, отрезков, треугольников и т.д., используя средства Паскаля для определения пользовательских типов данных. Можно также в качестве элементов стека иметь пары чисел, тройки чисел ...