[工学]第三章 堆栈和队列.ppt

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

第三章 堆栈和队列 Chapter 3 Stack and Queue 初始化 参数:S是指向结构变量的指针; 功能:建一个空栈S; void inistack(seqstack *s) { s-top=-1; } 判栈空操作 参数:S是存放结构体变量的数组; 功能:判断S是否为空,为空返回1,否则返回0; int empty(seqstack s) { if(s.top==-1) return 1; else return 0; } 入栈 功能:将数据元素x压入顺序堆栈S,入栈 成功返回1,否则返回0 int push(seqstack *s, DataType x) { if (s-top==maxlen-1) { printf(“\nStack is full”); return 0; } s-top++; s-stack[s-top]=x; return 1; } 出栈 功能:弹出顺序堆栈s的栈顶数据元素值到参数 d,出栈成功返回1,否则返回0 取栈顶元素 功能:取顺序堆栈s的当前栈顶数据元素值到 参数d,成功返回1,否则返回0 中缀表达式:A + ( B – C / D) × E 后缀表达式:ABCD/-E×+ 后缀表达式特点 1、与相应的中缀表达式中的操作数次序相同 2、没有括号 3.2 队列 三、队列的顺序存储结构 顺序队列的假溢出 循环队列的表示和实现 1. 基本原理: a.当rear和front达到maxlen-1后,再前进一个位置就自动到0。 b.如何实现: 用求模运算,rear=(rear+1)%maxlen void iniqueue(sequeue *sq) { sq-front=0; sq-rear=0; } int addqueue(sequeue *sq,DataType x) { if (sq-front==(sq-rear+1)%maxlen) { printf(“\nQueue is full”); return 0; } sq-queue[sq-rear]=x; sq-rear=(sq-rear+1)%maxlen; return 1; } int delqueue(sequeue *sq, DataType *d) { if (sq-front==sq-rear) { printf(\n Queue is empty!); return 0; } *d=sq-queue[sq-front]; sq-front=(sq-front+1)%maxlen; return 1; } 四、队列的链式存储结构 中缀表达式转换为后缀表达式的处理规则 1、如为操作数,直接输出到队列; 2、如当前运算符高于栈顶运算符,入栈; 3、如当前运算符低于栈顶运算符,栈顶运算符退栈,并输出到队列,当前运算符再与栈顶运算符比较; 4、如当前运算符等于栈顶运算符,且栈顶运算符为“(”,当前运算符为“)”,则栈顶运算符退栈,继续读下一符号; 5、如当前运算符等于栈顶运算符,且栈顶运算符为“#”,当前运算符也为“#”,则栈顶运算符退栈,表示运算结束; = # ) = ( / × - + # ) ( / × - + 当前运算符(a) 栈顶运算 符(b) 运算符优先级关系 ABCD # +(-/ )×E# 9 ABC # +(-/ D)×E# 8 ABC # +(- /D)×E# 7 AB # +(- C/D)×E# 6 AB # +( -C/D)×E# 5 A # +( B-C/D)×E# 4 A # + (B-C/D)×E# 3 A # +(B-C/D)×E# 2 # A+(B-C/D)×E# 1 输出 STACK 中缀表达式 步骤 ABCD/ -E × + # # 16 ABCD/ -E × # + # 15 ABCD/ -E # + × # 14 ABCD/ - # + × E# 13 ABCD/ - # + ×E# 12 ABCD/ - # +( )×E# 11 ABCD/ # +(- )×E# 10 输出 STACK 中缀表达式 步骤 后缀表达式的处理过程 T4 T4 ← A + T3 AT3+ T3 ← T2 × E AT2E×+ T2 ← B – T1 ABT1-E×+ T

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档