网站大量收购独家精品文档,联系QQ:2885784924

数据结构 第三章.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式的描述方式主要有三种: 中缀表达式:运算符放在两个运算对象之间; 前缀表达式(波兰式):运算符放在两个运算对象之前。 后缀表达式(逆波兰式):运算符放在两个运算对象后面; 在前 (后)缀表达式中,不再引入括号,运算符放在两个运算对象的前 (后)面,所有的计算按运算符出现的顺序,严格从左向右(从右往左)进行(不再考虑运算符的优先规则)。由此可见,前(后)缀表达式的计算比中缀表达式的计算简单,便于程序自动处理。 注:运算对象在中缀表达式、前缀表达式、后缀表达式中的出现次序不变,只是运算符出现的次序不同。 说明: 中缀表达式转化为后缀表达式: ①将中缀表达式中所有的计算顺序都按计算规则用嵌套括号表示; ②顺序将每对括号中的运算符移到相应括号的后面; ③删除所有括号。 如:6*(2+5)-7先转化为:((6*(2+5))-7),再转化为:625+*7- 中缀表达式转化为前缀表达式: ①将中缀表达式中所有的计算顺序都按计算规则用嵌套括号表示; ②顺序将每对括号中的运算符移到相应括号的前面; ③删除所有括号。 如:6*(2+5)-7先转化为:((6*(2+5))-7)再转化为:-*6+257 前缀和后缀表达式转化为中缀表达式将上述步骤逆反即可。前缀与后缀表达式之间的转化可以借助于中缀表达式。 (5)栈与递归 一个子程序可以直接或间接地调用自身。在一层层递归调用时,其返回地址和处在每一调用层的变量数据都需一一记下进栈。返回时它们一一出栈并被采用。递归是程序设计中一个强有力的工具。 float fac(int n) { float p; if ( (n==0) || (n==1) ) p=1; else p=n*fac(n-1); return p; } 其一,有许多函数是递归定义的,如求n!、Fibonacci数列等函数: 其二,有的数据结构,如二叉树、广义表等,由于结构本身固有的递归特性,它们的操作可递归的描述,如下例: void PreOrder(BiTree bt) { if (bt!=NULL) { printf (%6c,bt-data); //访问根结点 PreOrder(bt-lchild); //先序遍历左子树 PreOrder(bt-rchild); //先序遍历右子树 } } 其三,虽然问题本身没有明显的递归结构,但用递归求解比迭代求解更简单,如八皇后、汉诺塔问题等,如下例: n阶Hanoi塔问题: 假设有三个分别命名为X、Y和Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘,如下图所示,现要求将X轴上的n个圆盘移至Z轴上并仍按同样顺序叠放。 圆盘移动时必须遵循下列规则: 每次只能移动一个圆盘; (2) 圆盘可以插在X、Y和Z中的任一塔座上; (3) 任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 void Hanoi(int n, char x, char y, char z) {//将塔座x上由小到大且自上而下编号为1至n的n个圆盘按规则移到塔座z上 if (n==1) move(x, 1, z); //编号为1的圆盘从x移到z else { Hanoi(n-1, x, z, y); //将x上编号为1到n-1的圆盘移到y,z作辅助轴 move(x, n, z); //将编号为n的圆盘从x移到z Hanoi(n-1, y, x, z); //将y上编号为1至n-1的圆盘移到z,x作辅助轴 } }//Hanoi 算法描述如下: void move(char x, int n, int z ) {//把编号为n的圆盘从x轴移到z轴的操作,c为搬动计数,全局变量 printf(“%d. Move disk %d from %c to %c\n”, ++c, n, x, z); } 二、队列 1、队列的定义 2、队列的表示与实现 1、队列的定义 队列(queue)也是线性表的一种特殊情况,其所有的插入均限定在表的一端进行,而所有的删除则限定在表的另一端进行。允许插入的一端称队尾(rear),允许删除的一端称队头(front)。队列的结构特点是先进队的元素先出队,因此,通常又把队列叫做先进先出(FIFO,First In First Out)表,如下图所示: a1 a2 a3 … an 出队列 入队列 队头 队尾 队列的示意图 * 数据结构

文档评论(0)

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

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

1亿VIP精品文档

相关文档