Стек. Реализация стека на базе массива

Стек представляет собой запоминающее устройство, из которого элементы извлекаются в порядке, обратном их добавлению, т.е. элемент, добавленный в стек последним, удаляется первым. Дисциплина работы стека обозначается LIFO (Last In First Out - последним пришел — первым уйдешь).

Стек можно представить в виде трубки с подпружиненным дном, расположенной вертикально. Верхний конец трубки открыт, в него можно добавлять элементы. Общепринятые английские термины в этом плане очень красочны, операция добавления элемента в стек обозначается push, в переводе "затолкнуть, запихнуть". Новый добавляемый элемент проталкивает элементы, помещенные в стек ранее, на одну позицию вниз. При извлечении элементов из стека они как бы выталкиваются вверх, по-английски pop ("выстреливают").

Примером стека может служить детская пирамидка, стог сена, стопка бумаг на столе, железнодорожный тупик, стопка тарелок. Отсюда произошло название стека, что по-английски означает стопка. Тарелки снимаются со стопки в порядке, обратном их добавлению. Доступна только верхняя тарелка, т.е. тарелка на вершине стека.

1. Описание реализации стека:

В качестве базы берется массив из N элементов: S[1.. N]. Заполнение стека выполняется от начала массива, т.е. самый первый элемент стека помещается в ячейку S[1].

Необходима дополнительная переменная Top, в которой хранится индекс вершины стека. Если tор = 0, то стек пуст. Если tор=n, то при попытке добавить элемент в стек происходит переполнение стека, поскольку размер стека в нашей реализации ограничен размером массива N.

2. Процедуры обработки стека:

a.

  1 2 3 4 5 6 7
S              

Top=5 S[Top]=2

Добавление элемента в стек

Procedure PUSH (S, top, a)

{добавление элемента а в стек}

If Top<>n then Top=Top+1

Рис. 3
S[Top]=a

else ‘Стек переполнен’

b.

  1 2 3 4 5 6 7
S              

Top=4

удаление элемента из стека

Function POP (S, top):int

{Извлечение элемента из стека}

If Top=0 then ‘Стек пуст’

else Pop=S[Top]

Рис. 4
Top=Top-1


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow