chapter03栈与队列2.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文档。上传文档
查看更多
第三章 堆栈和队列 Stack and Queue 堆栈和队列 一摞叠放好的盘子, 上好子弹的弹匣 排队等车的队列 它们的状态是不断变化的(数据结构扩大或者缩减) 添加和删除是它们共同的操作 与其他数据结构最大的不同是:他们的添加和删除局限在特定的位置。 初始化 参数:S是指向结构变量的指针; 功能:建一个空栈S; void init(seqstack *s) { seqstack *s=new seqstack; s-top=-1; return s; } 判栈空操作 参数: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==maxsize-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达到maxsize-1后,再前进一个位置就自动到0。 b.如何实现: 用求模运算,rear=(rear+1)%maxsize void init(sequeue *sq) { sq-front=0; sq-rear=0; } int Inqueue(sequeue *sq,datatype x) { if (sq-front==(sq-rear+1)%maxsize) { printf(“\nQueue is full”); return 0; } sq-queue[sq-rear]=x; sq-rear=(sq-rear+1)%maxsize; return 1; } int Outqueue(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)%maxsize; return 1; } 四、队列的链式存储结构 多个函数嵌套调用的规则是: 此时的内存管理实行“栈式管理” 后调用先返回 ! 例如: void main( ){ void a( ){ void b( ){ … … … a( ); b( ); … … }//main }// a }// b main的数据区 函数a的数据区 函数b的数据区 表达式计算 表达式计算是编译系统中的一个重要问题,其实现方法是堆栈的一个典型应用。 中缀表达式:运算符总是出现在两个操作数之间(除单目运算符外); 后缀表达式:运算符出现在操作数之后。 前缀表达式:运算符出现在操作数之前。 例如: Exp = a ? b + (c ? d / e) ? f 前缀式: + ? a b ? ? c / d e f 中缀式: a ? b + c ? d / e ? f 后缀式: a b ? c d e / ? f ? + 结论:操作数之间的相对次序不变. 中缀式的缺点

文档评论(0)

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

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

1亿VIP精品文档

相关文档