Стек - такой последовательный список с переменной длиной, для которого включение и исключение элементов выполняются только с одной стороны списка, называемого вершиной стека (Last In - First Out - "последним пришел - первым исключается"). Основные операции над стеком:
- включение нового элемента (английское название push - заталкивать),
- исключение элемента из стека (англ. pop - выскакивать).
Полезными могут быть также вспомогательные операции:
- определение текущего числа элементов в стеке;
- очистка стека;
неразрушающее чтение элемента из вершины стека
2 Машинное представление стека и реализация операций
При представлении стека в статической памяти для него выделяется память, как для вектора. В дескрипторе этого вектора кроме обычных для вектора параметров должен находиться также указатель стека - адрес вершины стека. Указатель стека может указывать либо на первый свободный элемент стека, либо на последний записанный в стек элемент. (Какой из этих двух вариантов выбрать, все равно, важно в последствии строго придерживаться его при обработке стека.) В дальнейшем мы будем всегда считать, что указатель стека адресует первый свободный элемент и стек растет в сторону увеличения адресов.
При занесении элемента в стек элемент записывается на место, определяемое указателем стека, затем указатель модифицируется таким образом, чтобы он указывал на следующий свободный элемент (если указатель указывает на последний записанный элемент, то сначала модифицируется указатель, а затем производится запись элемента). Модификация указателя состоит в прибавлении к нему или в вычитании из него единицы.
Операция исключения элемента состоит в модификации указателя стека (в направлении, обратном модификации при включении) и выборке значения, на которое указывает указатель стека. После выборки слот, в котором размещался выбранный элемент, считается свободным.
Операция очистки стека сводится к записи в указатель стека начального значения - адреса начала выделенной области памяти.
Определение размера стека сводится к вычислению разности указателей: указателя стека и адреса начала области.