第三章 栈和队列PPT课件.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(i-1,j-1) N (i-1,j) (i-1,j+1) E (i,j-1) @ (i,j) w (i,j+1) (i-1,j+1) S (i+1,j) (i+1,j+1) -1 0 -1 1 0 1 1 1 1 0 -1 1 0 -1 -1 -1 N NW W SW S ES E EN 方向 方向矩阵move g=i+move[k][0]; H=j+move[k][1]; maze[1][1]=2; s[top][0]=1; s[top][1]=1; s[top][2]=3; ++top; while (top!=0f==0) {--top; i=s[top][0]; j=s[top][1]; k=s[top][2]; if (g==mh==nmaze[g][h]==0) {for(p=0;ptop;++p) { printf(%d,%d,%d\n,s[p][0],s[p][1],s[p][2]);} printf(%d,%d,%d\n,i,j,k); printf(%d,%d,%d\n,m,n,k); f=1; } } if(f==0) printf(no path\n); } while(k=8) {g=i+move[k][0]; h=j+move[k][1]; if(maze[g][h]==0) {maze[g][h]=2; s[top][0]=i; s[top][1]=j;s[top][2]=k; ++top; i=g; j=h; k=0; } k=k+1; } 死不松手 * ---Reverse Polish Notation 递归:自己××自己,如(定义、调用) ?递归的对象:一个对象部分地包含它自己,或用它自己给自己定义。如某些数据结构的定义 〖例〗线性表的另一种定义: 若元素个数为0,则称为空表 若元素个数大于0,则有且仅有一个第一个元素(即表头),剩余元素形成一个表(即表尾) 。 §3.3 栈与递归的实现 ?递归的过程:一个过程直接或间接地调用自己 〖例〗f(n) = n ! = f(n-1)*n ?递归的应用 递归定义:如阶乘、Fibonacci数列等 数据结构:如表、树、二叉树等 问题求解:如Hanoi塔 定义是递归的 §3.3 栈与递归的实现 long fact ( long n ) { if ( n == 0 ) return 1; //递归结束条件 else return n * fact (n-1); //递归的规则 } 过程的嵌套调用 r 主程序 s r r r s 子过程1 r s t 子过程2 r s t 子过程3 §3.3 栈与递归的实现 主程序 main( ): fact(4) 参数传递 递归调用 结果返回 回归求值 fact(4): fact(3): fact(2): fact(1): fact(0): 1 直接定值为1 计算 4*fact(3) 计算 3*fact(2) 计算 2*fact(1) 计算 1*fact(0) 1 2 6 24 §3.3 栈与递归的实现 数据结构是递归的--表 空表 非空表: (表头元素+除表头元素以外的剩余元素) 查找表L中是否有元素值e §3.3 栈与递归的实现 LinkList search(LinkList L, ElemType e) // L为不带头结点的单向非循环链表 { if ( L==NULL ) return NULL; else if ( L-data==e ) return L; else return search(L-next, e); } void hanoi(int n, char a, char b, char c) n-圆盘数 a-源塔座 b-中介塔座 c-目标塔座 搬动方法 n=1, a-c n1: hanoi(n-1, a, c, b) a-c hanoi(n-1, b, a, c) 注意 用递归调用的结果, 不关注该结果如何 获得的细节 §3.3 栈与递归的实现 问题求解是递归的—Hanoi塔 §3.3 栈与递归的实现 当在一个函数的运行期间调用另一个函数时,在运行该被 调用函数之前,需先完成三件事: 将所有的实在参数、返回地址等信息传递给被调用函数保存; (现场保护) 为被调用函数的局部变量分配存储区; 将控制转移到被调用函数的入口。 从被调用函数返回调用函数之前,应该完成: 保存被调函数的计算结果; 释放被

文档评论(0)

177****6330 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档