数据结构第三章栈和队列幻灯片.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用栈实现递归过程 例:n!的定义为: ? ? ? ? int fact (int n) { if (n= =0) return 1 ; else return (n* fact (n-1) ) ; } n! = 1   n=0 /*递归终止条件*/ n*(n-1) n0 /*递归步骤*/ 递归函数都有一个终止递归的条件,如上例n=0时,将不再继续递归下去。 递归函数的调用类似于多层函数的嵌套调用,只是调用单位和被调用单位是同一个函数而已。在每次调用时系统将属于各个递归层次的信息组成一个活动记录(ActivaTion Record),这个记录中包含着本层调用的实参、返回地址、局部变量等信息,并将这个活动记录保存在系统的“递归工作栈”中,每当递归调用一次,就要在栈顶为过程建立一个新的活动记录,一旦本次调用结束,则将栈顶活动记录出栈,根据获得的返回地址信息返回到本次的调用处。下面以求3!为例说明执行调用时工作栈中的状况。 为了方便将求阶乘程序修改如下: main () { int m,n=3 ; m=fact (n) ; R1: printf (“%d!=%d\n”,n,m) ; ? } int fact (int n) { int f ;  if (n= =0) f=1 ;  else f=n*fact (n-1) ; R2: return f ; } 算法3.4 其中R1为主函数调用fact 时返回点地址,R2为fact函数中递归调用fact (n -1)时返回点地址。 int fact (int n) { if (n0){ printf(“error input\n”); return(-1); } if (n==0 || n==1) { e.f=1; e.n=n; } else { e.f=0; e.n=n; } InitStack(s); Push(s,e); while (! StackEmpty(s) ){ GetTop( s,e ); if ( !e.f){ if (e.n1) { e1.f=0; e1.n=e1.n-1; } else { e1.f=1; e1.n=n; } push( s, e1) } else { pop( s,e ); if ( StackEmpty(s) ) return( e.f ); pop( s,e1 ); e1.f=e1.n*e.f; push( s,e1 ); } } } 3.3 队列 3.3.1 队列的定义及基本运算 3.3.2 队列的存储实现及运算实现 3.3.1 队列的定义及基本运算 “先进先出” (FIFO---First In First Out)的数据结构:即插入在表一端进行,而删除在表的另一端进行,我们将这种数据结构称为队或队列; 队尾(rear):把允许插入的一端叫队尾(rear); 队头(front):把允许删除的一端叫队头(front)。 例:如图3.11所示是一个有5 个元素的队列。入队的顺序依次为a1、 a2 、a3 、a4 、 a5 ,出队时的顺序将依然是a1、 a2 、a3 、a4 、 a5 。 图3.11 队列示意图 a1 a2 a3 a4 a5 入队 出队 队列也是一种运算受限制的线性表,所以又叫先进先出表。 在日常生活中队列的例子很多,如排队买东西,排头的买完后走掉,新来的排在队尾。 在队列上进行的基本操作有: ⑴ 队列初始化:Init_Queue(q) 初始条件: 队q不存在。 操作结果: 构造了一个空队。 ⑵ 入队操作: In_Queue(q,x), 初始条件: 队q存在。 操作结果: 对已存在的队列q,插入一个元素x到队尾,队发生变化。 ⑶ 出队操作: Out_Queue(q,x) 初始条件: 队q存在且非空 操作结果: 删除队首元素,并返回其值,队发生变化。 ⑷ 读队头元素:Front_Queue(q,x) 初始条件: 队q存在且非空 操作结果: 读队头元素,并返回其值,队不变; ⑸ 判队空操作:Empty_

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档