- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息学奥赛教学-栈-C++版--青少年教育精选.ppt
main() { printf(input a string(@_over):); gets(s); printf(result=%d,comp(s)); system(pause); return 0; } * drdgthtrhtrj 栈的用途极为广泛,在源程序编译中表达式的计算、过程的嵌套调用和递归调用等都要用到栈,下面以表达式计算为例子加以说明。 源程序编译中,若要把一个含有表达式的赋值语句翻译成正确求值的机器语言,首先应正确地解释表达式。例如,对赋值语句 X=4+8×2-3; (式 11.1) 其正确的计算结果应该是17,但若在编译程序中简单地按自左向右扫描的原则进行计算,则为:X=12×2-3=24-3=21 这结果显然是错误的。因此,为了使编译程序能够正确地求值,必须事先规定求值的顺序和规则。通常采用运算符优先数法。 一般表达式中会遇到操作数、运算符和语句结束符等,以算术运算符为例,对每种运算赋予一个优先数,如: 运算符:× ÷ + - 优先数:2 2 1 1 (语句结束符“;”的优先数为零) 在运算过程中,优先数高的运算符应先进行运算(但遇到括号时,应另作处理)。按这样的规定,对式(11.1)自左向右进行运算时,其计算顺序就被唯一地确定下来了。计算顺序确定后,在对表达式进行编译时,一般设立两个栈,一个称为运算符栈(OPS),另一个称为操作数栈(OVS),以便分别存放表达式中的运算符和操作数。编译程序自左向右扫描表达式直至语句结束,其处理原则是: ①凡遇到操作数,一律进入操作数栈; ②当遇到运算符时,则将运算符的优先数与运算符栈中的栈顶元素的优先 * drdgthtrhtrj 数相比较;若该运算符的优先数大,则进栈;反之,则取出栈顶的运算符,并在操作数栈中连续取出两个栈顶元素作为运算对象进行运算,并将运算结果存入操作数栈,然后继续比较该运算符与栈顶元素的优先数。 例如式(11.1)中,当扫描到“+”和“×”时都要将运算符入栈。接着扫描到“-”号, 其优先数小于乘号所以乘号退栈,并执行8×2,将结果16再存入操作数栈。再将“-”号的优先数与运算符栈的栈顶元素“+”号的优先数相比较,两者相等,所以再将加号退栈,进行4+16,结果为20,再入栈,接着,由于运算栈已空,所以减号入栈。当扫描到“3”时,操作数入栈。当扫描到“;”时,其优先数最低, 所以减号退栈并执行20-3,结果为17并入栈。因已扫描到语句结束符,所以表达式的求值结束,结果为17。 * drdgthtrhtrj 【例3】模拟计算机处理算术表达式过程。从键盘上输入算术表达式串(只含+、-、×、÷运算符,允许含括号),输出算术表达式的值。设输入的表达式串是合法的。 【算法分析】 建立两个栈,一个是操作数栈(number),一个是运算符栈(symbol),根据运算符的优先级对两个栈进行相应的操作。 #includecstdio #includecstdlib #includestring #includecstring using namespace std; int number[101],i=0, p=1; char symbol[101],s[256], t[256]; void push() //算符入栈运算 { symbol[++p]=s[i]; } void pop() //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算 { switch (symbol[p--]) { case +:number[p]+=number[p + 1];break; * drdgthtrhtrj case -:number[p]-=number[p + 1];break; case *:number[p]*=number[p + 1];break; case /:number[p]/=number[p + 1];break; } } bool can() //判断运算符的优先级别,建立标志函数 { if ((s[i]==+||s[i]==-)symbol[p]!=() return 1; if ((s[i]==*||s[i]==/)(symbol[p]==*||symbol[p]==/))return 1; return 0; } main() { printf(String :);gets(s); s[strlen(s)]=);symbol[p]=(; w
您可能关注的文档
- 人教版小学一年级语文上册《识字4》5--青少年教育精选.ppt
- 人教版小学一年级语文上册《识字6》1--青少年教育精选.ppt
- 人教版小学一年级语文上册《识字6》2--青少年教育精选.ppt
- 人教版小学一年级语文上册《识字8》2--青少年教育精选.ppt
- 人教版小学一年级语文上学期语文语文园地一教案2--青少年教育精选.ppt
- 人教版小学一年级语文两只小狮子1--青少年教育精选.ppt
- 人教版小学一年级语文两只小狮子4--青少年教育精选.ppt
- 人教版小学一年级语文两只小狮子7--青少年教育精选.ppt
- 人教版小学一年级语文两只小狮子8--青少年教育精选.ppt
- 人教版小学一年级语文两只鸟蛋1--青少年教育精选.ppt
最近下载
- DL∕T 637-2019 电力用固定型阀控式铅酸蓄电池.pdf VIP
- RoboSim虚拟机器人第三课-灯如流水.pdf VIP
- 22、啊哈C语言!逻辑的挑战(修订版)-2020-01-05.pdf VIP
- 《有余数的除法》.pptx VIP
- 山东第四届结构设计竞赛手册(终稿).pdf VIP
- 气排球比赛记分表格模板.doc VIP
- CMA测试试题培训资料.doc VIP
- 超星尔雅学习通《中华诗词之美》章节测试答案满分版.doc VIP
- 幼儿安全教案:会惹祸的阳台.doc VIP
- 第三单元 水溶液中的离子反应与平衡 (⼤单元教学设计)-【大单元教学】高二化学同步备课系列(人教版2019选择性必修1).pdf VIP
文档评论(0)