Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 1-34 / 4. Стек. Массив

.pdf
Скачиваний:
65
Добавлен:
11.05.2015
Размер:
297.16 Кб
Скачать

4. Стек. Абстрактный тип данных стек. Реализация стека с помощью массива.

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

1.создать стек

2.поместить элемент в стек

3.забрать элемент

4.получить значение верхнего элемента

5.проверить на пустоту

6.удалить.

Вершина стека адресуется с помощью специального указателя. Стек считается пустым, если указатель смещен вниз на длину одной ячейки относительно низа стека. При работе со стеком необходимо учитывать, что если в процессе заполнения указатель выйдет за верхнюю границу, то происходит переполнение стека и новый элемент ввести уже невозможно. Для этого перед реализацией стека необходимо указывать его границы.

Представление стека – массивом, содержащим не меньшее число элементов, чем может быть заслано в стек. Для очередного элемента достаточно иметь один указатель t на этот элемент.

Когда стек пуст, t = 0.

Описание:

const MaxStack= 100;

Type TypElem -описание элемента

var stack : array[1..MaxStacks] of TypElem ; integer T;

T=0

Поместить новый элемент(Push(y)):

1)t = t + 1;указатель перемещается "вверх" на длину слота или ячейки;

2)stack[t] = y; по значению указателя в стек помещается информация о новом элементе.

Чтобы добавить элемент в стек, нужно увеличить значение указателя на единицу, а затем занести в элемент массива с индексом t информацию из y:

Забрать элемент(Pop(y)):

1)y = stack[t];прочитывается информация об исключаемом элементе по значению указателя;

2)t = t - 1;затем указатель смещается "вниз" на один слот.

Получить знач. верхнего э-та(Top(y)): y=stack[t]

Проверка на пустоту IsEmpty: if t = 0 then return true

else return false

При этом следует помнить, что t не может быть меньше 1 и больше MaxStack. Следовательно, нужны проверки на пустоту и переполнение стека.

Извлекаем:

if t = 0 then обрабатываем пустой стек else y := stack[t]; t := t - 1;

Добавляем:

if t = MaxStack then обрабатываем переполненный стек else t := t + 1; stack[t] := y ;

Затраты постоянные О(1)-делается все за одну итерацию Недостаткипроверка на переполнение.