第3章 数据结构-栈和队列(天津大学).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 数据结构-栈和队列(天津大学)

栈的抽象数据类型 栈的数组表示 — 顺序栈 表达式的中缀表示 a + b * ( c - d ) - e ^ f / g 表达式中相邻两个操作符的计算次序为: 优先级高的先计算; 优先级相同的自左向右计算; 当使用括号时从最内层括号开始计算。 C++中操作符的优先级 优先级 操作符 1 单目-、! 2 *、/、% 3 +、- 4 、=、、= 5 ==、!= 6 7 || 一般表达式的操作符有4种类型: 算术操作符 如双目操作符(+、-、*、/ 和%)以及单目操作符(-)。 关系操作符 包括、=、==、!=、=、。这些操作符主要用于比较。 逻辑操作符 如与()、或(||)、非(!)。 括号‘(’和‘)’ 它们的作用是改变运算顺序。 后缀表示法计算表达式的值 从左向右顺序地扫描表达式,并用一个栈暂存扫描到的操作数或计算结果。 在后缀表达式的计算顺序中已隐含了加括号的优先次序,括号在后缀表达式中不出现。 计算例 a b c d - * + e f ^ g / - 通过后缀表示计算表达式值的过程 顺序扫描表达式的每一项,根据它的类型做如下相应操作: 若该项是操作数,则将其压栈; 若该项是操作符op,则连续从栈中退出两个操作数Y和X,形成运算指令XopY,并将计算结果重新压栈。 当表达式的所有项都扫描并处理完后,栈顶存放的就是最后的计算结果。 void Calculator :: Run ( ) { char ch; double newoperand; while ( cin ch, ch != ‘=’ ) { switch ( ch ) { case ‘+’ : case ‘-’ : case ‘*’ : case ‘/’ : DoOperator ( ch ); break; //计算 default : cin.putback ( ch ); //将字符放回输入流 cin newoperand; //读操作数 AddOperand ( newoperand ); } } } 利用栈将中缀表示转换为后缀表示 使用栈可将表达式的中缀表示转换成它的前缀表示和后缀表示。 为了实现这种转换,需要考虑各操作符的优先级。 各个算术操作符的优先级 isp叫做栈内(in stack priority)优先数 icp叫做栈外(in coming priority)优先数。 操作符优先数相等的情况只出现在括号配对或栈底的“#”号与输入流最后的“#”号配对时。 链式队列类的定义 循环队列的类定义 单向递归用迭代法实现 long FibIter ( long n ) { if ( n = 1 ) return n; long twoback = 0, oneback = 1, Current; for ( int i = 2; i = n; i++ ) { Current = twoback + oneback; twoback = oneback; oneback = Current; } return Current; } 尾递归用迭代法实现 例如,汉诺塔(Tower of Hanoi)问题的解法: 如果 n = 1,则将这一个盘子直接从 A 柱移到 C 柱上。否则,执行以下三步: ① 用 C 柱做过渡,将 A 柱上的 (n-1) 个盘子移到 B 柱上: ② 将 A 柱上最后一个盘子直接移到 C 柱上; ③ 用 A 柱做过渡,将 B 柱上的 (n-1) 个盘子移到 C 柱上。 问题的解法是递归的 * * #include iostream.h #include strclass.h” void Hanoi (int n, String A, String B, String C) { //解决汉诺塔问题的算法 if ( n == 1 ) cout move A to C endl; else { Hano

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档