中缀表达式转逆波兰表达式二叉树的做法(Pascal)
发布网友
发布时间:2022-08-14 14:21
我来回答
共2个回答
热心网友
时间:2024-10-26 11:30
思路:输入readln(str1)
输入以后,str1的值就是"1+12-7+19"
然后再用pos和delete将数字与符号分开来,并且储存于a和b数组里,假设a数组里数字的数量为k1,b数组里符号的数量为k1+1
for i:=1 to k1+1 do
case i of
'+':a[i+1]:=a[i]+a[i+1];
'-':a[i+1]:=a[i]-a[i+1];
end;
writeln(a[k1]);
这样就行了
热心网友
时间:2024-10-26 11:30
program wt(input,output);
type atype=array[1..1000]of char;
var
i,stop,j:longint;
w,ch:char;
a,s:array[1..1000]of char;
sy:string;
procere push(ch:char;var s:atype);
begin
inc(stop);
s[stop]:=ch;
end;
procere pop(var s:atype);
begin
stop:=stop-1;
end;
function p(ch:char):longint;
begin
case ch of
'#':p:=-1;
'(':p:=0;
'+','-':p:=1;
'*','/':p:=2;
')':p:=3;
end;
end;
begin
push('#',s);
readln(sy);
j:=1;
i:=0;
while i<length(sy) do
begin
inc(i);
if sy[i] in ['0'..'9'] then
begin
while sy[i] in ['0'..'9'] do
begin
a[j]:=sy[i];
inc(j);
inc(i);
end;
i:=i-1;
end
else begin
case sy[i] of
'+','-','*','/':begin
w:=s[stop];
while p(w)>=p(sy[i]) do
begin
a[j]:=w;
j:=j+1;
pop(s);
w:=s[stop];
end;
if p(w)<p(sy[i]) then push(sy[i],s);
end;
'(':push(sy[i],s);
')':begin
while s[stop]<>'(' do
begin
a[j]:=s[stop];
j:=j+1;
pop(s);
end;
stop:=stop-1;
end;
end;
end;
end;
w:=s[stop];
while w<>'#' do
begin
a[j]:=w;
pop(s);
w:=s[stop];
inc(j);
end;
for i:=1 to j-2 do
write(a[i],' ');
writeln(a[j-1]);
end.