Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture5_PAS.doc
Скачиваний:
22
Добавлен:
08.12.2018
Размер:
60.93 Кб
Скачать

Основные операции над стеком и описательные алгоритмы реализации некоторых из них

К базисным операциям над стеком относятся: создание пустого стека; проверка стека на пустоту; добавление элемента в стек; удаление элемента из стека; извлечение данных, начиная с последнего элемента стека.

1. Создание элемента стека:

  • выделение памяти под первый элемент стека и внесение в него информации;

  • установка вершины стека Тор на созданный элемент.

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

  • выделение памяти под новый элемент;

  • внесение значения в информационное поле нового элемента и установка связи между ним и старой вершиной стека Тор;

  • установка вершины стека Тор на новый элемент.

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

3. Удаление элемента из стека:

  • извлечение информации из информационного поля вершины стека Тор в переменную и установка на вершину стека вспомогательного указателя Р;

  • перемещение указателя вершины стека Тор на следующий элемент и освобождение памяти, занимаемой старой вершиной стека.

При удалении элемента из стека удаляется последний элемент из памяти, а указатель вершины перемещается к следующему (предпоследнему) элементу.

Свойства стека и его практическое применение.

1. Стек как механизм реализации вложенности.

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

  • Трансляторы также используют стеки при разборе арифметических выражений и вложенных друг в друга конструкций языка. При синтаксическом анализе вложенных друг в друга конструкций языка трансляторы используют магазинные (стековые) автоматы (стек при этом содержит не до конца проанализированные конструкции языка).

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

Пример подпрограмм, реализующих стек

Unit type_st; { модуль описания типов }

Interface

type

point=^element;

element=record

data: string;

next: point;

end;

Implementation

end.

Unit work_st; { модуль процедур, реализующих работу со стеком }

Interface

uses crt, type_st;

procedure Output( pcur: point); { просмотр элементов стека }

procedure Push(var pcur: point; s: string); { добавление элемента в стек }

procedure Pop(var pcur: point; var s: string); { удаление элемента из стека }

Implementation

procedure Output; { просмотр элементов стека }

var

p: point;

begin

clrscr;

p:=pcur;

repeat

write(p^.data,' ');

p:=p^.next;

until p=nil;

end;

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

var

p: point;

begin

new(p);

p^.data:=s;

p^.next:=pcur;

pcur:=p;

end;

procedure Pop; { удаление элемента из стека }

var

p: point;

begin

if pcur<>nil then

begin

p:=pcur;

s:=p^.data;

pcur:=p^.next;

dispose( p);

end;

end;

end.

Соседние файлы в предмете Программирование на Pascal