Автор: алекс 26.12.2003 22:09
как вычислить значение выражения, записанного в префиксной форме с использованием стека (дека, очереди). есть влом писать код, мона ссылкой на сайт какой кинуться ;)
Автор: trminator 26.12.2003 22:54
Предположим, что у тебя уже есть класс-стек с операциями push, pop, volume (volume говорит, сколько элементов в стеке). А выражение пусть записано как массив таких записей:
Код
type TElem = record
is_sign : boolean; {Является ли знаком операции}
value : integer {Если операция, то
1 = +
2 = -
3 = *
4 = /, иначе само значениечисла}
end;
Массив назовем, например,
A.
Заведем два стека - ops и nums. В первом храним операции, во втором - операнды.
Дальше делаем что-то такое:
Код
for i:=1 to N do
if A[i].is_sign then nums.push(A[i].value)
else begin
nums.push(A[i].value);
if nums.volume = 2 then begin
y:=nums.pop;
x:=nums.pop;
op:=pos.pop;
nums.push(calc(x, y, op))
end;
end;
Функция calc просто считает значение x <op> y (х [+-*/] y)