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

第3章 栈和队列课程.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.函数的嵌套调用 在函数嵌套调用中,一个函数的执行没有结束,又开始另一个函数的执行,因此必须用栈来保存函数中中断的地址,以便调用返回时能从断点继续往下执行。 例 设有一个主程序,它调用函数a,函数a又调用函数b,函数b又调用函数c,(见下页),其中r,s,t分别表示中断地址,我们可以用一个栈来描述调用情况(见下页)。 主程序调用函数a,留下一个断点地址r进栈,然后主函数处于挂起状态,进入函数a中执行,函数a中再调用函数b,留下一个断点地址s进栈,然后函数a处于挂起状态,进入函数b中执行,函数b中调用函数c, 留下一个断点地址t进栈, 然后函数b处于挂起状态,进入函数c中执行,函数c执行完后,要返回断点处继续执行,但返回到那一个断点呢?根据栈顶元素来决定。返回时,执行退栈操作,先退出t,故返回t断点继续执行, 接着退栈退出s,故返回s断点继续执行,接着退栈退出r,返回r断点继续执行,最后栈为空,算法结束。 5. 函数的递归调用 函数的递归调用也是一种嵌套, 故也必须用栈来保存断点信息,但递归调用相当于同一个函数的嵌套调用,故除了保存断点信息外,还必须保存每一层的参数、局部变量等。 例3-7 求n! 可用递归函数描述如下: 1 n=0 n! = n*(n-1)! n0 3.2 队列 3.2.1 队列的定义 仅允许在一端进行插入,另一端进行删除的线性表,称为队列(queue)。允许插入的一端称为队尾(rear),允许删除的一端称为队头(frort)。 队列是一种先进先出(First In First Out)的特殊线性表,或称FIFO表。 若队列中没有任何元素,则称为空队列,否则称为非空队列。 队列的描述可以用如图3-9的方式所描述。 3.2.2 队列的基本运算 队列可定义如下五种基本运算: 1.初始化队列 INIQUEUE(Q) 将队列Q设置成一个空队列。 2.入队列 ENQUEUE(Q,X) 将元素X插入到队尾中,也称“进队” ,“插入”。 3.出队列 DLQUEUE(Q) 将队列Q的队头元素删除,也称“退队”、“删除”。 4.取队头元素 GETHEAD(Q) 得到队列Q的队头元素之值。 5.判队空 EMPTY(Q) 判断队列Q是否为空,若为空返回1,否则返回0。 3.2.3 队列的抽象数据类型描述 队列的抽象数据类型可描述为:ADT QUEUE IS DATA:含有n个元素a1,a2,a3,…an,按FIFO规则存放,每个元素的类型为elemtype Operation: Void INIQUEUE(Q) //将队列Q设置成一个空队列。Void ENQUEUE(Q,X)//将元素X插入到队尾中,也称“进队” ,“插入”。 Void DLQUEUE(Q) //将队列Q的队头元素删除,也称“退队”、“删除”。 Elemtype GETHEAD(Q) //得到队列Q的队头元素之值。 int EMPTY(Q) 判断队列Q是否为空,若为空返回1,否则返回0。 End queue * 第3章 栈和队列 数据结构(C++描述) 3。1 栈 3。2 队列 退出 目录 3.1 栈 3.1.1 栈的定义 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。 3.1.2栈的运算 1.初始化栈:INISTACK(S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH(S,X) 将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。 3.出栈: POP(S) 删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。 4.取栈顶元素: GETTOP(S) 取栈S中栈顶元素。 5.判栈空: EMPTY(S) 判断栈S是否为空,若为空,返回值为1,否则返回值为0。 3.1.3栈的抽象数据类型描述 ADT

文档评论(0)

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

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

1亿VIP精品文档

相关文档