数据结构之栈对列串课件PPT.ppt

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

数据结构;要 求 熟练掌握以下内容: 堆栈的特征、基本运算并能设计简单算法 队列、循环队列的特征、基本运算并能设计简单算法 串的定义和应用 了解以下内容: 线性表运算时间复杂性分析 堆栈、队列实际应用 ;3.1 堆栈(Stack) ;堆栈的表示;本例中top=4 ;栈的顺序存储结构;入栈函数 ;2. 出栈(Pop) ;出栈函数;例3.1 ;例3.1解答;入栈算法 ;出栈算法;栈的链式存储结构;其结构定义如下: typedef struct node { elementtype data; Struct node *next; }stacklnode;;进栈;出栈; 堆栈的应用 ;函数嵌套调用A1调用A2,A2调用A3时的返回地址在堆栈中的情况如右图所示。 ;2. 堆栈在表达式计算中的应用 ;例:求 –B*(C+D)的值。 ( 其逆波兰表示:B@CD+* ) ;3.数的转换 把进制的数 n转换成八进制的数r。 1. n除以r, 商为S, 输出余数。 2. 若s=0,则结束,输出序列的逆就是转 换后的结果。 3. n:=s, 转1. 例:把进制的数355转换成八进制的数。 ;4.表达式中左右括号的匹配问题;栈与递归;求n!的递归算法: Int fact(n) { if(n==0) Return(1); Else return(n*fact(n-1)); } ;递归的执行 调用时做以下工作: 1.调用时必须保存本层所有的参数和返回地址 等; 2.给下层参数赋值; 3.转移到被调用的函数入口。 返回时做以下工作: 1.保存被调用函数的计算结果。 2.恢复上层参数。 3.返回原处。 例:阶乘 Int fact(int n) { if (n==0) return(1); Else return(n*fact(n-1)); } ;Fact(n) { Top=1; m=n; While(m1) { S[top]=m; m=m-1 top=top+1; } R=1; While(top1) { Top=top-1; R= R * s[top]; } }; 斐波那契(Fibonacci)数的定义; 希尔波特(D.Hilbert,1891)曲线的定义; 塞平斯基(Sierpinski)曲线的定义; Hanoi塔稳问题; 中断处理问题; …… ;3.2 队列(Queue) ;队列的表示;对列的顺序存储结构 假定有A~F 6个元素先后进入队列,但A、B,C三个元素已出队了,故队尾指针r=6,而队头指针f=3。;对列的形式定义;插入操作 若 Q.rearmaxsize-1; /*对列不满*/ 则插入:Q.rear++: /*插入*/ Q.elements[Q.rear]=x; 删除操作 若 Q.frontQ.rear /*对列非空*/ 则删除: Q.front++; /*删除*/ return(Q.elements[Q.front]);1. 入队(insert) ;入队函数 ;2. 出队(Delete) ;出队函数; “假溢出”问题 ;循环队列 ;如何判断循环队列的“空”和“满”呢? 先看一个例子。 例:一循环队列 max =6,队列中已有3个元素,研究其插入3个元素后和删除3个元素后的状态。 ;可以看出,不管队列是“满”还是“空”,都有front=rear。那么,如何判断是“空”还是“满”呢? 解决方法: 1. 另设一标记,以区分队列是“空”还是“满”; 2. 不设标记,把尾指针加1后等于头指针作为队 满的条件。 这样, 队满的条件:(Q.rear+1)%max=Q.front 队空的条件:Q.rear=Q.front ;循环队列入队函数;循环队列出队函数; 队列的应用 ;例3.2 ;例3.2算法1;例3.2算法2;队列的链式存储结构 增

文档评论(0)

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

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

1亿VIP精品文档

相关文档