C++编程《第04课 栈(2)》教学课件.pptxVIP

  • 0
  • 0
  • 约1.94千字
  • 约 24页
  • 2026-03-12 发布于广西
  • 举报

第04课;学习目标;知识讲授;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;【问题描述】读入一个中缀达式,操作数和操作符都以空格分隔,以@符号结束。将这个表达式转为后缀表达式(逆波兰表达式)。

【输入】一行,若干个操作数或操作符组成的中缀表达式,以@结尾。保证输入合法。

【输出】逆波兰表达式。(操作数、操作符之间以一个空格分隔)

【样例输入】3/2@

【样例输出】32/

;二、将表达式转为逆波兰表达式;#includebits/stdc++.h

usingnamespacestd;

strings1[101];

strings2[101];

inttop1,top2;

voidM_D(){//不处理括号。

stringbuf;

while(1){

cinbuf;

if(buf==@)break;

if(buf==*||buf==/){

stringt;

cint;

s1[top1]+=(+t++buf);

}

elses1[++top1]=buf;

}

};voidA_M(){//不处理括号。

for(inti=1;i=top1;i++){

if(s1[i]==+||s1[i]==-){

s2[top2]+=(+s1[i+1]++s1[i]);

++i;

}

elses2[++top2]=s1[i];

}

}

intmain(){

M_D();//读入并处理乘除法;

A_M();

couts2[top2];

return0;

};二、将表达式转为逆波兰表达式;课堂练习;1、后缀表达式求值;1、后缀表达式求值;1、后缀表达式求值;2、[NOIP2013普及组]表达式求值;#includebits/stdc++.h

usingnamespacestd;

structnode{//连运算符一起存起来,方便计算;

inttype;

intnum;

charop;

};

nodes1[100000];

inttop1;

intmain(){

intbuf=0;

chart;

intflag=0;

while(1){

t=getchar();

if(t=0t=9){

buf=(buf*10+t-0)%10000;

flag=1;

}

;else{

if(flag){

++top;

s[top].type=2;

s[top].num=buf;

buf=0;

flag=0;

}

while(top=3s[top].type==2s[top-1].type==1s[top-2].type==2(s[top-1].op==*)){

intx,a=s[top-2].num,b=s[top].num;

if(s[top-1].op==*)x=(a*b)%10000;

s[top-2].type=2;

s[top-2].num=x;

top-=2;

}//第一次扫描处理掉乘法

if(t==+||t==*){

++top;

s[top].type=1;

s[top].op=t;

}

elsebreak;

}

};for(inti=1;i=top;i++){//处理掉加法;

s1[++top1]=s[i];

while(top1=3s1[top1].type==2s1[top1-1].type==1s1[top1-2].type==2(s1[top1-1].op==+)){

intx,a=s1[top1-2].num,b=s1[top1].num;

if(s1[top1-1].op==+)x=(a+b)%10000;

elsex=(a/b)%10000;

s1[top1-2].type=2;

s1[top1-2].num=x;

top1-=2;

}

}

couts1[top1].num;

return0;

};小结;作业;同学们加油

文档评论(0)

1亿VIP精品文档

相关文档