第13课单行道问题队列.docVIP

  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文档。上传文档
查看更多
第13课单行道问题队列

第13课 单行道问题—— 队列 由于前面修路,交警叔叔把路改成了单行道,所有的车只能在入口排好一辆一辆地进入单行公路,在单行道中不能超车(因为公路的宽度只能够让一辆车通过),也不能后退(因为后面有车退不动),只有当它前面没有其他车的时候才能通过单行道出去,现在楠楠的车也在单行道中,她想知道自己是第几个开出单行道的人,你能用程序来帮她吗? 例如:用不同的字符串代表不同的车,现在有C,Bfd,G,H,Ns,DD,E,S,EG按上面的顺序进入了单行道,楠楠的车是H,刚好是第4部开出单行道的车。 【分析】 所有这些在单行道中的车可以看成是由不同字符串所组成的一个数据表,我们用数组a来表示这个数据表,其中数据元素的下标,可以代表他们进入单行道时的顺序,如上例即是:a[1]=C,a[2]=Bfd,…,a[9]=EG。 由于在单行道中的车是先进入就先出去,所以可以从数组的第一个元素开始扫描查找目标字符串,如果没有找到,就继续向下扫描。否则就输出元素下标,即是所求。 〖参考程序〗 Program p13_1; Var a:array[i..100] of string; i,n:integer; nannan:string; begin readln(nannan); {读入代表楠楠的车的字串} readln(n); {读入共有n辆车进入了单行道} for i:=1 to n do readln(a[i]); {读入第i辆进入单行道中的车辆字符串} i:=0; repeat {从数组第一元素开始向后逐一查找代表楠楠车的字符串} i:=i+1; until a[i]=nannan; writeln(i); end. 返回 及进充电 队列 在实际生活中上,我们坐公交车要排队上车,在超市买东西要排队付钱,这些就是我们常常见到的队列,它们的特点都是先到的排在前面,后到的排在后面。而在编程时,我们也用一种称为“队列”的数据组织方式来模仿日常生活中的队列。 队列的操作特点是先进先出,后进后出,所有元素从一端进入,从另一端出去,就如汽车在单行道上行走时,只能在道路的一端进入,一端出去。我们把出去的一端称为“队首(front),可以进入的一端称为“队尾”(rear),如图13-1所示: a1 a2 a3 … … an 队首 队尾 图13-1 队列示意图 循环队列 如果用数组a[1..n]来存储队列时,数组的上界n即是队列所容许的最大容量,如图13-2所示,当最后一个位置an已使用而还有数据要入队时,则会产生“溢出”,但前面的队首可能因元素出队而空出很多空间,这样就会白白浪费空间,而且队列又不能继续入队。 … an 队首 队尾 图13-2 队列可以产生溢出的情形 为了解决上面问题,把前面空出来的可用空间利用起来,我们对有n个存储单元的队列,只利用前n-1个单元,而最后一个位置an用作提示指针,指向绕到第1个位置,形成逻辑上的环状空间,这样当front或rear到达整个数组的末尾时,又可以回到开头,这样的队列我们称它是循环队列。如图13-3所示: 图13-3 循环队列示意图 我们约定,如图13-3所示,队尾(rear)指示到当前队尾元素所在位置的下一位,队首(front)指示队列中第一元素在数组中的位置。 队首(front)和队尾(rear)均可以环绕数组移动,队列中腾出的空间就可以再利用,当front和rear的值大于了数组长度n时,我们就用求余运算使它们的值始终在[1..n]之间,就像时钟的指针经过了12点后总是又从1点开始一样(如17 mod 12=5). 如图1-4所示,当队列的头尾重合,即front=rear时,这时队列为空;如图13-5所示,当front=(rear mod n)+1时,这时队列为满;其余时候,队列中的元素个数为:(rear-front+n) mod n。 图13-3 队列为空 图13-4 队列为满 探索奥秘 芸芸和楠楠在玩扑克牌,她们共有n张扑克,这些扑克上分别记为1,2,…,n,芸芸打开扑克第一张是1,把它放在一边然后把最上

文档评论(0)

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

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

1亿VIP精品文档

相关文档