[理学]数据结构讲义第3章栈和队列.ppt

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

第三章 栈和队列 ①顺序栈中数据元素用动态生成的数组存放。 ②顺序栈的栈底位置是固定不变的,设置在顺序表的表头,base称为栈底指针。 ③顺序栈的栈顶位置是随着进栈和退栈操作而变化的,用一个指针top(栈顶指针)来指示当前栈顶位置。top初值指向栈底,每插入一个新的栈顶元素,top加1,删除栈顶元素,top减1。因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。 ④栈的最大长度为stacksize。 θ1 θ2 + - * / ( ) # + - * / ( = ) # = 【假溢出】    顺序队列因多次入队列和出队列操作后出现的有存储空间但不能进行入队列操作的溢出。 【解决办法】 1、采用循环队列; 2、按最大可能的进队操作次数设置顺序队列的最大元素个数; 3、修改出队算法,使每次出队列后都把队列中剩余数据元素向队头方向移动一个位置; 4、修改入队算法,增加判断条件,当假溢出时,把队列中的数据元素向队头移动,然后再完成入队操作。 【循环队列】 把顺序队列所使用的存储空间臆造成一个逻辑上首尾相连的循环队列。 Thank You! OperandType EvaluateExpression() { InitStack(OPTR); Push(OPTR, ’#’ ); InitStack(OPND); c = getchar( ); while( c !=‘#’ || GetTop (OPND, c ) ) { if (!In(c,OP)) { Push((OPND, c); c=getchar( ); } else switch( Precede(GetTop(OPTR), c){ 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, Operate(a,theta,b) ); break; } } return GetTop ( OPND ); } 一个递归函数的运行过程类似于多个函数的嵌套调用,差别仅在于调用函数和被调用函数是同一个函数。为了保证每一层的递归调用都是对本层的数据进行操作,在执行递归函数的过程中需要一个递归工作栈。它的作用是: 1、将递归调用时的实际参数和函数返回地址传递给下一层执行的递归函数; 2、保存本层的参数和局部变量,以便从下一层返回时重新使用它们。 栈与递归的实现 递归:函数直接或间接的调用自己的过程叫做递归。 void print ( int w) { int i; if ( w!=0) { print( w-1 ); for( i=1; i=w ; i++ ) printf(“ %3d ”,w); printf(“\n”); } } 递归的执行情况分析 递归调用执行情况如下: W=3 Print(2); for( i=1; i=w ; i++ ) printf(“ %3d ”,w); printf(“\n”); W=2 Print(1); for( i=1; i=w ; i++ ) printf(

文档评论(0)

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

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

1亿VIP精品文档

相关文档