计算机科学与编程导论的模块11.ppt

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

老鼠及其邻接位置坐标 NW (i-1,j-1) N (i-1,j) NE (i-1,j+1) W (i,j-1) Mouse (i,j) E (i,j+1) SW (i+1,j-1) S (i+1,j) SE (i+1,j+1) 13.4 堆栈应用举例 n m 0 0 方向 0 1 2 3 4 5 6 7 -1 -1 0 1 1 1 0 -1 0 1 1 1 0 -1 -1 -1 N NE E SE S SW W NW 13.4 堆栈应用举例 若老鼠在(i,j)的位置,要进入SW方向的(g,h)点,则: g=i+move[5][0] h=j+move[5][1] 若(i,j)所在位置为(4,7),则老鼠向SW方向行走一步后,新位置(g,h)的坐标值为(4+1,7-1),即(5,6)。 13.4 堆栈应用举例 行走方向:N,NE,E,SE,S,SW,W,NW。 选通一个可通方向后,将目前所在位置及所选方向记录下来,为退回做准备。 凡进入过的点用2做标记。 设置堆栈,每个元素包括行坐标、列坐标、所选方向三项。 13.4 堆栈应用举例 例:对于一个栈,给出输入项A、B、C,如果输入项序列由ABC组成,试给出所有可能的输出序列。 A进 A出 B进 B出 C进 C出 ABC A进 A出 B进 C进 C出 B出 ACB A进 B进 B出 A出 C进 C出 BAC A进 B进 B出 C进 C出 A出 BCA A进 B进 C进 C出 B出 A出 CBA 不可能产生输出序列CAB 堆栈的基本概念和特点; 堆栈的和存储方式:顺序存储和链式存储; 顺序栈的定义与操作:包括测试栈满和栈空,进栈和出栈要修改栈顶指针top,多栈共享空间的问题; 链栈的定义与操作:不存在栈溢出,进栈和出栈操作都在链表表头进行,出栈时需要判断栈空; 掌握顺序栈与链栈主要成员函数的实现。 堆栈小结 多栈共享空间问题 考虑多栈共享一个大的内存空间,要解决相应产生的问题。 设将多个堆栈顺序地映射到一个已知大小为m的存储空间STACK[m]上。 多栈共享空间问题 1、 两个堆栈共享该存储空间:第一个栈底位于STACK[0],另一个栈底位于STACK [m-1]。使用时两栈各自向中间伸展,仅当两个栈顶指针相遇(S1. top == S2. top)时才发生上溢。 a S1[0] b S1[1] c S1[2] 4 S2[3] 3 S2[2] 2 S2[1] 1 S2[0] STACK[0] STACK[m-1] S1.top S2.top 2、两个以上堆栈共享该存储空间(大小为m): 将m个存储空间平均分配给n个栈,每个栈的存储空间为m/n。 设top[n]为n个堆栈的栈顶指针集合,top[i]为第i个堆栈的栈顶指针,bot[i]为第i个堆栈的栈底指针。另设bot[n+1]为n+1个栈底指针集合。其中第n+1个堆栈是虚设的,目的是为了检测第n个栈栈满与否。 多栈共享空间问题 初始时, bot[i]=top[i]=i*(m/n) (0=i=n-1) bot[n]=m 当m=15,n=5时: 各元素陆续进栈后: 0 3 6 9 12 15 m-1 bot[0] top[0] bot[1] top[1] bot[2] top[2] bot[3] top[3] bot[4] top[4] bot[5] a b 1 d1 d2 g 0 3 6 9 12 15 m-1 bot[0] top[1] bot[2] bot[3] top[3] bot[4] bot[5] top[4] top[2] bot[1] top[0] 第i个堆栈“栈空”的条件是 top[i]==bot[i],(0=i=n-1) 第i个堆栈“栈满”的条件是 top[i]==bot[i+1] (0=i=n-1) 在第i个栈中插入一个元素时,若 top[i-1]=bot[i]成立,则第i个栈满,但m个空间未必满。在第j个栈与第j+1个栈之间可能还有可用空间。给新元素找到一个合适的位置,有三种情况: ① 在ijn中确定有1个可用空间的最小j,即找到的第i个栈右边的第一个可用空间的栈j,此时必有 top[j]bot[j+1],然后将第i+1,i+2,…,第j个栈的所有元素连同栈指针都右移一个位置,使得第i个栈空出一个空间。 ② 当第i个栈右边没有可用空间时,在0=ji中确定由可用空间的最大j,即找到第i个栈左边第1个可用空间j,然后将第j+1,j+2,…,第i个栈的所有元素连同栈指针都左移一个位置,使得第i个栈空出一个空

文档评论(0)

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

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

1亿VIP精品文档

相关文档