Стек представляет собой запоминающее устройство, из которого элементы извлекаются в порядке, обратном их добавлению, т.е. элемент, добавленный в стек последним, удаляется первым. Дисциплина работы стека обозначается LIFO (Last In First Out - последним пришел — первым уйдешь).
Стек можно представить в виде трубки с подпружиненным дном, расположенной вертикально. Верхний конец трубки открыт, в него можно добавлять элементы. Общепринятые английские термины в этом плане очень красочны, операция добавления элемента в стек обозначается push, в переводе "затолкнуть, запихнуть". Новый добавляемый элемент проталкивает элементы, помещенные в стек ранее, на одну позицию вниз. При извлечении элементов из стека они как бы выталкиваются вверх, по-английски pop ("выстреливают").
Примером стека может служить детская пирамидка, стог сена, стопка бумаг на столе, железнодорожный тупик, стопка тарелок. Отсюда произошло название стека, что по-английски означает стопка. Тарелки снимаются со стопки в порядке, обратном их добавлению. Доступна только верхняя тарелка, т.е. тарелка на вершине стека.
|
|
1. Описание реализации стека:
В качестве базы берется массив из N элементов: S[1.. N]. Заполнение стека выполняется от начала массива, т.е. самый первый элемент стека помещается в ячейку S[1].
Необходима дополнительная переменная Top, в которой хранится индекс вершины стека. Если tор = 0, то стек пуст. Если tор=n, то при попытке добавить элемент в стек происходит переполнение стека, поскольку размер стека в нашей реализации ограничен размером массива N.
2. Процедуры обработки стека:
a.
|
Procedure PUSH (S, top, a)
{добавление элемента а в стек}
If Top<>n then Top=Top+1
|
else ‘Стек переполнен’
b.
|
Function POP (S, top):int
{Извлечение элемента из стека}
If Top=0 then ‘Стек пуст’
else Pop=S[Top]
|