- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]北京信息科技大学数据机构课件第3章
1. 掌握栈和队列类型的特点,并能在相应的应用问题中正确选用它们。 2. 熟练掌握栈类型的两种实现方法,特别应注意栈满和栈空的条件以及它们的描述方法。 3. 熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 本章学习要点 特殊线性表 栈 队 列 ⑴栈的定义 ⑵操作特性 ⑶ADT定义 ⑴队列定义 ⑵操作特性 ⑶ADT定义 顺序栈 链 栈 循环队列 链队列 逻辑结构 存储结构 逻辑结构 存储结构 比 较 比较 比较 ⑴基本操作的实现 ⑵时间性能 ⑴基本操作的实现 ⑵时间性能 本章概览 —循环队列应用举例 编写“逐行输出前 n 行二项式系数”的算法。 二项式系数表 第 1 行 1 1 第 2 行 1 2 1 第 3 行 1 3 3 1 第 4 行 1 4 6 4 1 … … … … … … 设第 i-1 行的值: (a[0]=0) a[1], …a[i], (a[i+1]=0) 0 则第 i 行的系数: b[j] = a[j-1]+a[j], j=1,2,…,i 0 status yanghui ( int n ) { // 打印输出杨辉三角的前 n ( n 0 )行 Queue Q; InitQueue(Q)//生成n+2长度的队列; EnQueue(Q, 0 ); // 添加行界值 EnQueue( Q, 1); EnQueue ( Q, 1 ); k = 1; while ( k n ) { EnQueue ( Q, 0 ); // 行界值“0”入队列 do { // 输出第 k 行,计算第 k+1 行} while (e!=0); k++; }//while } // yanghui … … … DeQueue ( Q, e ); // 行界值“0”出队列 while (!QueueEmpty (Q) ) { // 单独处理第 n 行的值的输出 DeQueue ( Q, e ); if (e!=0) printf (“%d”, e); }//while 利用“循环队列”计算二项式系数的过程 0 1 2 3 4 5 0 1 1 0 s + e = Q.front Q.rear 0 1 1 输出: Q.front 1 1 Q.rear 1 1 Q.front 2 2 Q.rear 1 1 Q.front 0 1 1 Q.rear 0 Q.rear 0 Q.front 1 1 1 1 Q.rear 1 Q.front 2 3 2 2 3 Q.rear Q.front 1 1 3 3 Q.rear 1 Q.front 0 1 1 Q.rear 0 Q.rear do { DeQueue(Q, s); GetHead(Q, e); if (e!=0) printf (“%d”, e); EnQueue(Q, s+e); } while (e!=0); * * void Hanoi(int n, char A, char B, char C) {?? if (n==1) Move(A, C); ???? else {?????????????? Hanoi(n-1, A, C, B); ???? Move(A, C); ????????? Hanoi(n-1, B, A, C);?????????????? }??????? } 例六、递归 递归函数的内部执行过程 每一次递归调用时,需要为过程中使用的参数、局部变量等另外分配存储空间。 每层递归调用需分配的空间形成递归工作记录,按后进先出的栈组织。 局部变量 返回地址 值 参 活动记录框架 递归 工作记录 ⑴ 运行开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址; ⑵ 每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈; ⑶ 每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。 例六、递归 ⑴ 写出函数当前调用层执行的各语句,并用有向弧表示语句的执行次序; ⑵ 对函数的每个递归调用,写出对应的函数调用
文档评论(0)