算数提高课件队列_第1页
算数提高课件队列_第2页
算数提高课件队列_第3页
算数提高课件队列_第4页
算数提高课件队列_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章栈与队列-续数据结构与算法张路

排队问题银行排队公交车排队打饭排队….如何保证等待线性表中较先等待的实体能够较早地使用资源(被处理)?队列—内容提要队列及其基本运算队列的实现队列的应用队列队列也是一种特殊的线性表,是一种只允许在表的一端进行插入操作,而在另一断进行删除操作的线性表。允许进行删除的这一端叫队列的头。允许进行插入的这一端叫队列的尾。当队列中没有任何元素时,称为空队列。队列的插入操作通常称为进队列或入队列。队列的删除操作通常称为退队列或出队列。队列的示意图是一种先进先出的线性表(FirstInFirstOut,FIFO),只允许在表的一端(队尾)进行插入,另一端(队头)进行删除。q=(k0k1k2…kn-1)k0k1k2…kn-1入队列出队列队头队尾队头队尾队列的基本运算创建一个空队列或将队列置成空队列;判断队列是否为空队列;往队列中插入一个元素;从队列中删除一个元素;求队列头部元素的值。队列的实现顺序表示队列的顺序表示顺序队列中基本运算的实现链接表示队列的链接表示链接队列中基本运算的实现队列的顺序表示要分配一块连续的存储区域来存放队列里的元素,用两个变量分别指示当前队列的头和尾元素的位置。头变量指出实际队头元素所在的位置,尾变量指出实际队尾元素所在位置的下一个位置(要插入的位置)#defineMAXNUM100/*队列中最大元素个数*/structSeqQueue/*顺序队列类型定义*/{DataTypeq[MAXNUM];intf,r;};typedefstructSeqQueue*PSeqQueue;队列的顺序表示的特征PSeqQueuepaqu;说明:头变量paqu->f存放即将要被删除的元素的下标。尾变量paqu->r存放即将要被插入的元素的下标paqu->q[paqu->f]表示当前队列头部的元素paqu->q[paqu->r]表示当前队列尾部的即将插入的元素初始时:paqu->f=paqu->r=0当前队列中元素的个数可以用paqu->r-paqu->f计算得到当paqu->r=paqu->f时,元素个数为0,即为空队列一个队列的变化过程

rfMaxNUM-1…43210空队列arfa进队barfb进队bfra出队cbrfc进队crfb出队rfc出队空队列普通顺序队列的缺陷队列溢出:当队列满时,再做进队列操作,这种现象称为上溢。当队列空时,再做删除操作,这种现象称为下溢。插入paqu->q[paqu->r]=xpaqu->r=paqu->r+1删除papu->f=papu->f+1当paqu->r=MAXNUM时,再做插入就会产生溢出,而实际上这时队列的前端还有许多空的可用的位置,这种现象称为假溢出。frfr循环队列解决方法:把数组paqu->q[MAXNUM]从逻辑上看成一个环。循环队列判空满条件:附设一变量,头尾相碰时判断头追上尾还是尾追上头。少用一个空间,当尾+1等于头时为满;当头等于尾时为空。队空条件:f==r;队满条件:(r+1)%MAXNUM=f环形队列基本运算的实现PSeqQueuecreatEmptyQueue_seq(void);

创建一个空队列,返回指向空队列的指针intisEmptyQueue_seq(PSeqQueuepaqu);

判断papu所指的队列是否为空队列,当papu所指的队列为空队列时,则返回1,否则返回0voidenQueue_seq(PSeqQueuepapu,DataTypex);进队列运算,表示往papu所指的队列中插入一个值为x的元素voiddeQueue_seq(PSeqQueuepapu);出队列运算,表示从papu所指的队列中删除一个元素DataTypefrontQueue_seq(PSeqQueuepapu);当papu所指的队列不空时,求队列头部元素的值,队列保持不变队列的实现顺序表示队列的顺序表示顺序队列中基本运算的实现链式表示队列的链接表示链接队列中基本运算的实现队列的链式表示队列的链接表示就是用一个线性链表来表示队列,队列中的每个元素对应链表中的一个结点。structNode /*结点结构*/{ DataTypeinfo; structNode* link;};typedefstructNode*PNode;structLinkQueue /*链接队列类型定义*/{ PNode f;/*头指针*/ PNode r;/*尾指针*/};typedefstructLinkQueue,*PLinkQueue;/*链接队列类型的指针类型*/plqufr^…插入删除PLinkQueueplqu;/*plqu是指向链接队列的一个指针变量*/头指针plqu->f尾指针plqu->r队列为空plqu->f=plqu->r=NULL链式队列中基本运算的实现PSeqQueuecreatEmptyQueue_seq(void);创建一个空队列,返回指向空队列的指针intisEmptyQueue_seq(PSeqQueuepaqu);判断papu所指的队列是否为空队列,当papu所指的队列为空队列时,则返回1,否则返回0voidenQueue_seq(PSeqQueuepapu,DataTypex);

进队列运算,表示往papu所指的队列中插入一个值为x的元素voiddeQueue_seq(PSeqQueuepapu);出队列运算,表示从papu所指的队列中删除一个元素DataTypefrontQueue_seq(PSeqQueuepapu);当papu所指的队列不空时,求队列头部元素的值,队列保持不变顺序队列与链式队列的比较

顺序队列

固定的存储空间方便访问队列内部元素链式队列可以满足大小无法估计的情况

访问队列内部元素不方便队列的应用

消息缓冲器

邮件缓冲器

操作系统的各种管理任务计算机的硬设备之间的通信也需要队列作为数据缓冲队列的应用—农夫过河问题农夫过河问题船小每次只能带一样东西,由于狼能吃羊、羊能吃白菜,因此留下的两样东西不能任意组合。

(农夫狼白菜羊)(农夫狼白菜羊)农夫过河问题该问题的求解可以使用试探法,每一步都搜索所有可能的选择,对前一步合适的选择再考虑下一步的各种方案。两种不同的搜索策略:广度优先搜索:搜索该步的所有可能状态,再进一步考虑后面的各种情况;(队列应用)深度优先搜索:沿某一状态走下去,不行再回头。(栈应用)广度优先:(m种状态)A1A2A3…AmA11A12…A1nA21A22……深度优先:(m种状态)A3…A211A21A2……A111A11A1假定采用广度优先搜索解决农夫过河问题:采用队列做辅助结构,把本步的所有状态都放在队列中,然后顺序取出对其分别处理,处理过程中再把下一步的状态放在队列中,……。由于队列的操作按照先进先出原则,因此只有前一步的所有情况都处理完后才能进入下一步。描述方法:四个目标各用一位(假定按照农夫、狼、白菜、羊次序),目标在河南位置:0,河北:1任一时间的状态采用四位0-1码表示,如0101表示农夫、白菜在河南,而狼、羊在河北(此状态为不安全状态)问题分析实现上述函数后的问题变为从0000状态出发,寻找全部由安全状态构成的状态序列,以1111为最终目标。状态序列中每个状态都可以从前一状态通过农夫(可以带一样东西)划船过河的动作到达。(序列中不能出现重复状态)目标位置判断用整数location表示上述四位二进制描述的状态,用四个函数从上述状态得到每个角色所在位置的代码。返回值为真表示在河的北岸intfarmer(intlocation){return((location&0x08)!=0); }intwolf(intlocation){return((location&0x04)!=0); }intcabbage(intlocation){return((location&0x02)!=0); }intgoat(intlocation){return((location&0x01)!=0); }安全状态判断//返回1:安全,0:不安全intsafe(intlocation){if((goat(location)==cabbage(location))&&(goat(location)!=farmer(location)))return(0);//羊吃白菜

if((goat(location)==wolf(location))&&(goat(location)!=farmer(location)))return(0); //狼吃羊

return(1); //其它状态为安全}可能到达的状态moveTo整数队列,元素为可以安全到达的中间状态。route顺序表,记录各个状态被访问过的情况(大小为16数组):-1表示未被访问,否则记录前驱状态值的下标。最后,(route[15]为非负值时)利用route建立正确的状态路径。算法实现

route顺序表:15,6,14,2,11,1,9,00000100100011011001011100110111111010100其他应用操作系统软件中作业、进程的管理银行业务处理铁路订票系统小结栈和队列是操作受限的线性表。这种操作限制主要体现在插入、删除操作的限制,普通的线性表的插入、删除可以在任何位置,而栈、队列的插入、删除数据元素的位置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论