- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构c语e言描述(耿国华)第3章
斐波那契数列的递归算法Fib(n)如下, Fib(int n) { if(n= =0||n= =1) return n; /* 递归出口 */ else return Fib(n-1)+Fib(n-2); /* 递归调用 */ } 图3.11 Fib(5)递归调用过程示意 3-12 Fib(5)循环调用过程示意图 单向递归的一个典型例子是我们讨论过的计算斐波那契数列的算法Fib(n)。 其中,递归调用语句Fib(n-1)和Fib(n-2)只与主调用函数Fib(n)有关,相互之间参数无关,并且这些递归调用语句也和尾递归一样处于算法的最后。 int Fib(int n): { int x,y,z; if(n==0||n==1) return n; /*计算 Fib(0) , Fib(1) */ else {int x=0, y=1,z; / * x=Fib(0), y=Fib(1) */ for( i=2;i= n; i ++ ) {z=y; /* z=Fib(i-1) */ = y=x+y; /* y=Fib(i-1)+Fib(i-2), 求Fib(i),形成第i项 */ x=z}; /* x=Fib(i-1) */ } return y ; } 尾递归 是指递归调用语句只有一个,而且是处于算法的最后。 我们以阶乘问题的递归算法Fact(n)为例讨论尾递归算法的运行过程。为讨论方便, 我们列出阶乘问题的递归算法Fact(n), 并简化掉参数n的出错检查语句, 改写递归调用语句的位置在最后,算法如下: long Fact(int n) { if(n==0) return 1; return n * Fact(n-1); } 循环结构的阶乘问题算法Fact(n)如下: long Fact(int n) { int fac=1; for(int i=1;i=n;i++) /*依次计算f(1), …, f(n)*/ fac=fac* i; /* f(i)= f(i) * i */ return fac; } 3.2 队 列 3.2.1 队列的定义 队列 (Queue)是另一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出(Fist In Fist Out, 缩写为FIFO)的特性。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。 假设队列为q=(a1,a2,…,an),那么a1就是队头元素,an则是队尾元素。队列中的元素是按照a1,a2,…,an的顺序进入的, 退出队列也必须按照同样的次序依次出队,也就是说,只有在a1,a2,…,an-1都离开队列之后,an才能退出队列。 数据元素:可以是任意类型的数据,但必须属于同一个数据对象。 关系: 队列中数据元素之间是线性关系。 基本操作: (1) InitQueue(Q): 初始化操作。 设置一个空队列。 (2) IsEmpty(Q): 判空操作。 若队列为空, 则返回TRUE, 否则返回FALSE。 (3)EnterQueue(Q,x):进队操作。在队列Q的队尾插入x。 操作成功,返回值为TRUE, 否则返回值为FALSE。 (4) DeleteQueue(Q,x): 出队操作。使队列Q的队头元素出队, 并用x带回其值。 操作成功,返回值为RUE, 否则返回值为FALSE。 (5) GetHead(Q,x): 取队头元素操作。用x取得队元素的值。操作成功,返回值为TRUE,否则返回值为FALSE。 (6) ClearQueue(Q): 队列置空操作。 将队列Q置为空队列。 (7) DestroyQueue(Q): 队列销毁操作。 释放队列的空间。 3.2.2 队列的表示和实现 1. 链队列 图3.13 链队列 链队列可以定义如下: #define TRUE 1 #define FALSE 0 typedef str
文档评论(0)