数据结构数据结构PPT.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构数据结构PPT.ppt

第三章 栈和队列 3.1 栈 3.1.1 抽象数据类型栈的定义 3.1.2 栈的表示和实现 3.2 栈的应用举例 3.2.1 数制转换 3.2.2 括号匹配的检验 3.2.3 行编辑程序 3.2.4 迷宫求解 3.2.5 表达式求值 3.4 队列 3.4.1 抽象数据类型队列的定义 3.4.2 链队列——队列的链式表示和实现 3.4.3 循环队列——队列的顺序表示和实现 伪代码描述迷宫算法 设定当前位置的初值为入口位置; do{ 若当前位置可通,   则{将当前位置插入栈顶;    若该位置是出口位置,则结束;    否则切换当前位置的东邻方块为新的当前位置;} 否则,若栈不空且栈顶位置还有其他方向未经搜索,      则设定新的当前位置为沿顺时针方向旋转找到的      栈顶位置的下一个邻块;     若栈不空但栈顶位置的四周均不可通,      则{删去栈顶位置;       若栈不空,则重新测试新的栈顶位置,直到找到一个可通的相邻块或出栈或栈空;} }while(栈不空); 3.2.5表达式求值 表达式求值是程序设计语言编译中的一个最基本问题。它的实现方法是栈的一个典型的应用实例。 在计算机中,任何一个表达式都是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。其中操作数可以是常数,也可以是变量或常量的标识符;运算符可以是算术运算体符、关系运算符和逻辑符;界限符为左右括号和标识表达式结束的结束符。在本节中,仅讨论简单算术表达式的求值问题。在这种表达式中只含加、减、乘、除四则运算,所有的运算对象均为单变量。表达式的结束符为“#”。 算术四则运算的规则为: (1)先乘除、后加减; (2)同级运算时先左后右; (3)先括号内,后括号外。 计算机系统在处理表达式前,首先设置两个栈: (1)操作数栈(OPND):存放处理表达式过程中的操作数。 (2)运算符栈(OPTR):存放处理表达式过程中的运算符。开始时,在运算符栈中先在栈底压入一个表达式的结束符“#”。 表3-1给出了+、-、*、/、(、)、和#的算术运算符间的优先级的关系。 计算机系统在处理表达式时,从左到右依次读出表达式中的各个符号(操作数或运算符),每读出一个符号后,根据运算规则作如下的处理: (1)假如是操作数,则将其压入操作数栈,并依次读下一个符号。 (2)假如是运算符,则: 1)假如读出的运算符的优先级大于运算符栈栈顶运算符的优先级,则将其压入运算符栈,并依次读下一个符号。 2)假如读出的是表达式结束符“#”,且运算符栈栈顶的运算符也为“#”,则表达式处理结束,最后的表达式的计算结果在操作数栈的栈顶位置。 3)假如读出的是“(”,则将其压入运算符栈。 4)假如读出的是“)”,则: A)若运算符栈栈顶不是“(”,则从操作数栈连续退出两个操作数,从运算符栈中退出一个运算符,然后作相应的运算,并将运算结果压入操作数栈,然后继续执行4)。 B)若运算符栈栈顶为“(”,则从运算符栈退出“(”,依次读下一个符号。 5)假如读出的运算符的优先级不大于运算符栈栈顶运算符的优先级,则从操作数栈连续退出两个操作数,从运算符栈中退出一个运算符,然后作相应的运算,并将运算结果压入操作数栈。此时读出的运算符下次重新考虑(即不读入下一个符号)。 图3-7给出了表达式5+(6-4/2)*3的计算过程,最后的结果为T4,置于OPRD的栈顶。 算法描述 OperandType EvaluateExpression() //设OPTR和OPND分别为运算符栈和运算数栈 Initstack(OPTR);Push(OPTR,’#’); Initstack(OPND);c=getchar(); While(c!=‘#’||Gettop(OPTR)!=‘#’){ If(!In(c,OP){Push(OPND,c); c=getchar();}//OP是运算符的集合 Else switch(Precede(Gettop(OPTR),c)){//Precede是优先关系 case ‘‘: //栈顶元素优先权低 Push(OPTR,c);c=getchar();break; case ‘=‘: //脱括号并接收下一个字符 Pop(OPTR,x);c=getchar();break; case ‘’://退栈并将运算结果入栈 Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Oper

文档评论(0)

zhoujiahao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档