第三章栈和队列2013解析.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文档。上传文档
查看更多
??while (kn)   {  // 通过循环队列输出前n-1行的值 ????????for( i=1; i=n-k; i++) ????????cout ; ????????EnQueue ( Q,0 );     // 行界值0入队列 ????????Do ????????{  // 输出第k行,计算第k+1行 ????????????Dequeue(Q,s); ????????????GetHead(Q,e); ????????????if(e)coute ; ????????????else coutendl;  ????????????EnQueue(Q,s+e); ????????} while(e!=0); ????????k++; ????} // while DeQueue ( Q,e ); // 行界值0出队列 ??while (!QueueEmpty (Q)) ????{ // 单独处理第n行的值的输出 ????????DeQueue (Q,e); ????????coute ; ????} // while } // yanghui 容易看出此算法的时间复杂度为O(n2)。 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序从停车场最里面向门口处停放最先到达的第一辆车停在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就可进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车辆都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进入。每辆车在离开停车场时,根据它在停车场内停留时间的长短交费。如果停在便道上的车辆未进停车场就要离去,允许其离去时不收停车费,并且仍然保持在便道上等待的车辆的次序。现在编制一个程序来模拟停车场的管理。 首先确定模拟程序中需要的数据结构及其操作。   由于停车场只有一个大门,因此可用一个栈来模拟;根据便道停车的特点,先排队的车辆先离开便道进入停车场,可以用一个队列来模拟;又因为排在停车场中间的车辆可以提前离开,因此还需要有一个地方(车辆规避所)保存为了让路离开停车场的车辆,很显然这也应该用一个栈来模拟。所以在程序中设置了两个顺序栈s1和s2分别表示停车场和规避所;设置了一个链队列q表示便道。它们的数据类型定义在下面的源程序中,为了操作方便,链队列表头结点中的num域中存放便道上的车辆数量。 程序执行时,当输入数据表示有车辆到达时,判断栈s1是否满,若未满就将新数据进栈s1;若栈已满,就将数据入队列q,表示车辆在便道上等待进入停车场。该操作过程由函数Arrive完成。当输入数据表示有车辆要离去时,就在栈s1中寻找此车牌号的车辆,如寻找到就让其离开停车场,并根据停车时间计费,同时将队列q的队头元素进栈s1;如没有找到,就到队列q中去寻找此车牌号的车辆。如在队列q中找到就允许其离开队列,并不收费;如找不到就显示出错信息。当离开停车场的车辆位于栈s1的中间时,必须先将此位置到栈顶之间的所有数据倒到栈s2中去,然后安排车辆出栈s1,最后将栈s2中的数据倒回到栈s1中来。该操作过程由函数Delive完成。显然,以上两个主要操作需要利用栈和队列的两个基本操作入栈(队列)和出栈(队列)来实现。源程序中的函数Display则可以随时显示停车场的状况。 凯撒加密(Caesar cipher)简介 凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成f;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。 在解码消息的时候,每个字母会反方向移动同样的位数。因此,如果k等于3,下面这条编码后的消息:vlpsolflwb iroorzv frpsohalwb 会被解码成:simplicity follows complexity 朱丽叶斯.凯撒在他的一些机密政府通信中真正用到了这种加密。遗憾的是,凯撒加密相当容易被破解。字母的移动只有26种可能;要破解密码,只需尝试各种密钥值,直到有一种可行即可。 使用重复密钥(repeating key)可以对这种编码技术做出改进,这时不再将每个字母移动常位数,而是利用一列密钥值将各个字母移动不同的位数。如果消息长于这列密钥值,可以从头再次使用这列密钥。例如,假设密钥值为:3???? 1????? 7???? 4???? 2??

文档评论(0)

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

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

1亿VIP精品文档

相关文档