计算逆波兰公式 ( 积分: 200 )

  • 主题发起人 主题发起人 BBM
  • 开始时间 开始时间
B

BBM

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样计算逆波兰公式?
 
请问怎样计算逆波兰公式?
 
高手们帮帮忙啊
 
找本《数据结构》照着算法写就是了
要不网上搜下,源码都是有的,其实最重要的是知道原理
 
你最好举一个例题,这样大家好分析[:D]
 
就是找不到源码啊,那位兄弟有啊?
 
http://www.programsalon.com/search_db.asp?keyword=%C4%E6%B2%A8%C0%BC&_search=%CB%D1+%CB%F7
 
晕,没有啊
 
在那个页面查找"逆波兰",你就看见了
 
type
TAbc=Integer;
TStack=record
S:array[1..100]of TAbc;
Top:Integer;
end;

procedure SetNull(var A:TStack);
begin
A.Top:=0;
end;

function pop(var A:TStack):TAbc;
begin
Result:=A.S[A.Top];
Dec(A.Top);
end;

procedure push(var A:TStack;N:TAbc);
begin
Inc(A.Top);
A.S[A.Top]:=N;
end;

function Comp(S:String):TAbc;
var
S1:TStack;
i:integer;
x:TAbc;
ch:char;
begin
S:=S+'@';//以@作为结尾
SetNull(S1);
i:=1;
ch:=S[1];
while ch<>'@'do
begin
case ch of
'0'..'9':begin
x:=0;
while ch<>' 'do
begin
x:=x*10+ord(ch)-ord('0');i:=i+1;ch:=S;
end;
end;
'+':x:=pop(S1)+pop(S1);
'-':x:=-pop(S1)+pop(S1);
'*':x:=pop(S1)*pop(S1);
'/':begin
x:=pop(s1);
X:=Pop(s1)div x;
end;
end;
push(S1,X);
i:=i+1;ch:=S;
end;
Result:=pop(S1);
end;
 
后退
顶部