Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Динамические структуры.doc
Скачиваний:
16
Добавлен:
01.07.2025
Размер:
435 Кб
Скачать
☆

Удаление элемента стека

1. Исходное состояние:

Val

?

Р

10

?

Тор

3

1

5

nil

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

Val

10

Val := Top^.Inf;

Р

10

P := Top;

Тор

3

1

5

nil

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

Val

10

Top := P^.Link;

Р

Dispose(P);

Тор

3

1

5

nil

В качестве примера использования структуры стек для решения задач рассмотрим программу, реализующую польский калькулятор. Такой калькулятор реализует арифметические выражения, записанные в постфиксной форме. В выражение могут входить цифр, разделенные запятой, и знаки четырех арифметических операций (+ - * / ). В постфиксной форме сначала записываются операнды, затем знак математической операции. Примеры:

Обычная запись

Постфиксная запись

3+4

3,4+

(5-4)+2

5,4-2+

2*(3+4)*5

2,3,4+*5*

Pascal:

Uses crt;

Type stack = ^stacint;

Stackint = record

Dt:integer;

Pt:stack;

End;

Var beg_st:stack;

i:integer;

x,y,k,z:integer;

s:string;

Procedure addstack(x:integer);

Var

Temp:stack;

Begin

New(temp);

Temp^.dt := x;

Temp^.pt := beg_st;

Beg_st := temp;

End;

Procedure del_st(var x:integer);

Var temp: stack;

Begin

X := beg_st^.dt;

Temp := beg_st;

Beg_st := beg_st^.pt;

Dispose(temp);

End;

Begin

Clrscr;

Readln(s);

Beg_st := nil;

Val(s[1],x,k);

Addstack(x);

For i:=2 to length(s) do

Begin

Val(s[i],x,k);

If s[i]<>’,‘ then

case s[i] of

‘+’: begin del_st(y); del_st(z); x:= y+z; addstack(x); end;

‘-’: begin del_st(y); del_st(z); x:= z-y; addstack(x); end;

‘*’: begin del_st(y); del_st(z); x:= y*z; addstack(x); end;

‘/’:begin del_st(y);del_st(z);x:= z div y;addstack(x); end;

else addstack(x);

end;

end;

del_st(x);

writeln(x);

readln;

end.