[工学]数据结构栈和队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]数据结构栈和队列

第三章 栈和队列 栈和队列是两种重要的线性结构。 栈和队列的插入、删除操作与线性表的插入、删除操作的比较: 3.1 栈 栈的示意图: 栈的应用 若求5!,递归调用执行过程: 计算机系统处理上述过程时,其关键是要正确处理执行过程中的递归调用层次和返回路径,也就是要记住每一次递归调用时的返回地址。在系统中用一个线性表动态记忆调用过程中的路径,其处理原则为: 根据以上的原则,可以给出线性表中的元素变化状态如下图所示(以递归调用时n值的变化为例): [栈]提要 3.1.1 栈的类型定义 栈的基本操作 InitStack(S) DestroyStack(S) StackLength(S) StackEmpty(S) GetTop(S, e) ClearStack(S) StackTravers(S, visit()) 3.1.3 栈的应用举例 例二、 括号匹配的检验 算法的设计思想: 例三、行编辑程序 在编辑程序中,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入错误,并在发现有误时可以及时更正。 假设从终端接受了这样两行字符: Whli##ilr#e (s#*s) (“#”称为退格符) outcha@putchar(*s=#++); (“@”退行符) 则实际有效的是下列两行: While (*s) putchar(*s++) 行编辑程序算法如下: void LineEdit( ){ //利用字符栈S,从终端接收一行并传送至调用过程的数据区 Initstack(s); ch=gether( ); //接收第一个字符 while(ch!=EOF){//EOF为全文结束符 while(ch!=EOF ch!=‘\n’){ switch(ch){ case ‘#’ : pop(s,c); break; case ‘@’ : clearstack(s); break; default : push(s,ch); break; } ch=getchar( ); //接收下一个字符 } 将从栈底到栈顶的栈内字符送至调用过程的数据区 clearstack(s); if(ch!=EOF) ch=gethar( ); } destroystack(s); }//LineEdit 例四、 表达式求值 限于二元运算符的表达式定义: 结论: 如何从后缀式求值? 先找运算符,再找操作数 为实现算符优先算法,设置两个栈: 表达式求值的算符优先算法描述如下: 表达式5+(6-4/2)*3的计算过程: 运算符栈栈顶运算符的优先权?当前运算符的优先权 例五、实现递归 //----- 栈的顺序存储表示 ----- Status InitStack (SqStack S) Status Push (SqStack S, SElemType e) { Status Pop (SqStack S, SElemType e) { 链栈 3.2 队列 队列的示意图: 队列的应用 [队列]提要 3.2.1 队列的类型定义 队列的基本操作: InitQueue(Q) DestroyQueue(Q) QueueEmpty(Q) QueueLength(Q) QueueTravers(Q, visit()) 3.2.2 队列类型的实现 链队列——链式映象 Status InitQueue (LinkQueue Q) { Status EnQueue (LinkQueue Q, QElemType e) { Status DeQueue (LinkQueue Q, QElemType e) { 队列的顺序映象 例如: 由此,在非空队列中,头指示器front总是指向队列中队头元素的位置,而尾指示器rear总是指向队尾元素的后一个位置。 解决这个问题有两种可行的方法: 循环队列示意: 但这里,还需要注意两个问题: 为了解决这个问题,可以采用两种方法: 循环队列的类型定义 Status InitQueue (SqQueue Q) { Status EnQueue (SqQueue Q, ElemType e) Status DeQueue (SqQueue Q, ElemType e) 其它形式的队列: 本章学习要点 作业 EnQueue(Q, e) a1 a2 an e … … 初始条件:队列Q已存在。 操作结果:插入元素e

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档