第三章(软件学院07版).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈和队列是重要的数据结构 栈和队列是线性表的子集 (是插入和删除受限的线性表) 栈必须按“后进先出”的规则进行操作, 队列必须按“先进先出”的规则进行操作。 和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。 从“数据结构”的角度看: 它们都是线性结构,即数据元素之间的关系相同。 但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的限定。 栈的抽象数据类型定义(顺序栈) 类型定义 操作定义 顺序栈 静态数组实现 动态数组实现 n转换为d(10,2,8,16)进制 将n/d求余数,同时商继续转换,直到商为0结束。 余数要逆序输出 吻合栈的特征 1)求余数为进栈 2)输出为出站栈 while(n) { push(a,n%d); n=n/d; } While(!stackempty(a)) {pop(a,x); printf(x); } if(in) { Printf(“%d”,S.base[i]); } 20-((3+(8-1)*2)+5) 20-(3+(8-1)*2)+5) 20-((3+)8-1(*2)+5) 括号匹配问题的分析:最先读取的左括号,最后执行push,读取的右括号,将一定有一个左括号的存在。 A)判断栈是否为空(错误) B)非空的话,pop 左括号进栈 右括号 判断栈是否为空:error(flag=0) 栈非空:看栈顶元素是否和它匹配 匹配:出栈 不匹配: error (flag=0) 字符读完毕后:栈为空结论就是匹配 括号匹配的算法 表达式定义一个长长的字符串exp。 读取exp的每个字符,当前字符为ch(while) { if(ch==‘(‘) push(S,ch); else if(ch==‘)’) { if(stackempty) pop(s,e); else{ 不匹配 break;} } else ch++; } if(stackempty())匹配 Else不匹配 多个行编辑的实现 逐个读入字符 普通字符进栈: #:栈顶元素出栈 @:栈顶元素出(行首)(统计行已经有的字符数:\n--- @前):pop 栈中最终剩余元素才是我们实际看到的字符:出栈?进一个新栈?出栈 例四、迷宫【问题描述】 以一个 m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路。或得出没有通路的结论 迷宫用计算机来求解方法其实很简单, 就是走遍所有可能的路径,直到找到出口为止, 当走到错误的路线的时候,就退回上一个路口交叉点,选择其他方向. 这种思维其实用堆栈(stack)完全可以解决 迷宫思路 ?在设计这个问题时,我考虑到以下几点: ????????1、迷宫入口和出口的坐标 ????????2、保存迷宫的2维数组 ????????3、获得路径的函数 我们模仿人走迷宫时的思路,设置一个当前点,一个目标点(下一个要走的点)。初始情况下当前点为入口,终止条件为当前点为出口,这样,我们的函数大概结构就出来了。 ????????在从入口到出口的过程中程序对当前点的上、下、左、右四个点依次进行判断,当发现任一个方向是未走过的区域时,就将当前点指向那个点进行尝试,同时将当前点入栈并做标记。而当4个方向都不通或已走过时,则为死路,标记当前点为死路并从栈中弹出上一个点继续进行尝试,这时因为当前点已被标记为死路,则弹出上一个点时就不会重复这条路,达到寻找正确路径的效果。 描述: 当前点: 坐标位置(x,y),可用二维数组实现(seat) 记录当前点探索的方向:di 如起点为(1,1),先判断东(1),南(2),西(3),北(4),顺时针方向转,判断其邻居是否通,不同的话,邻居转向下一个方向探索,若均不通,则按原路返回,退栈.取栈顶元素,沿下一个方向探索 注意:凡走过的也要标记符号: 迷宫算法 迷宫演示见cd中的递归 cd迷宫 DS-Algo-VC下的第三章算法3.3 运算符号规则 a ? b + (c ? d / e) ? f 运算先后顺序为:*,/,-,*,+ 中序规则为+*ab*-c/def 因为运算的 1) a * b 2) d / e 3) c-2) 4) 3) *f 5) 1) +4) 合并的结果为: a*b + c-d/e*f 运算符号规则 a ? b + (c ? d / e) ? f 运算先后顺序为:*,/,-,*,+ 先序规则为+*ab*-c/def 因为运算的 1) *ab 2) /de 3)-c2) 4)*3)f 5)+1)4) 合并的结果为: +*ab*-c/def

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档