数据结构 队列.pptVIP

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构 队列

第五章 队列 5.1 何谓队列 队列数据结构规定:在有序列表中数据的输出、输入是分别由不同端进行处理,输出端称为前端(front),输入端称为后端(rear),这样会使得先存入的数据会先被取出,也就是具有先进先出FIFO的特性。 队列的应用也很多,下面列出几个较常见的: 1.图形的广度优先搜索法。 2.优先队列,此种队列在取出元素时是根据所存元素的某项特性值或优先权而取出具最小或最大数值的元素。 3.操作系统中的工作调度,若工作的优先权相同,则采用先到先做的原则。 4.用于“spooling” (假脱机,信息暂存,当信息需进一步处理时,对其进行暂时存贮),先将输出数据写在磁盘上,再由打印机把先存入者先处理的顺序将数据输出。 队列和堆栈一样也可使用两种结构:数组结构和链表结构。 抽象数据类型Queue 元素:无限制,由应用决定 结构:保持元素先进先出的特性。 操作: (1)void Init(Queue Q)//初始化生成一个空栈 (2)void Addqueue(Element e,Queue Q)/入队操作 (3)void Delqueue(Elment e,Queue Q)//出队操作 (4)Element Top(Queue Q)//读队首元素值 (5)bool Empty(Queue Q)//判队列空操作 (6)bool Full(Queue Q)//判队列满操作 5.2用数组仿真队列 队列本身是有序列表,若使用数组的结构来存储队列的结构,则队列结构数组的声明如下: struct queue { int queue[MaxSize]; int front; int rear; } 其中MaxSize是该队列的最大容量。因为队列的输出、输入分别从前后端来处理,因此需要两个变量front和rear分别记录队列前后端的索引值,front会随着数据输出而变动,而rear则是随着数据输入而改变。 初始化队列 void init(queue q) { q.front=-1; q.rear=-1; } 判断队列空empty函数 bool empty(queue q) { return(q.front==q.rear); } 判断队列满full函数 bool full(queue q) { return (q.rear ==maxsize-1); } 当我们将数据存入队列时称为“addqueue” ,addqueue的处理主要有两个步骤: (1)将队尾指针往前移:rear+1; (2)若尾指针rear小于等于队列的最大索引值MaxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。 ? 入队addqueue函数 void addqueue(queue q,char x) { q.rear ++; q.data [q.rear ]=x; } 从队列中取出数据项称为“delqueue” ,delqueue的操作可分为4个步骤: (1)检查队列中是否有数据存在。 (2)若头指针front等于尾指针rear,则表示队列中无数据。 (3)若头指针front不等于尾指针rear,则将队列头指针往前移front+1。 (4)取出队头指针所指的数组元素内容。 出队delqueue函数 void delqueue(queue q,char x) { q.front ++; x=q.data [q.front ]; } 显示队列数据print函数 void print(queue q) { int i; for(i=q.front +1;i=q.rear ;i++) coutsetw(4)q.data [i]; coutendl; } 5.3用链表仿真队列 除了使用数组结构外,也可以使用链表结构来建立队列。队列的链表结构如下: struct node { char data; node *next; }; struct queue { node *front,*rear; }; 其中front和rear是作为队列前后端的输出、输入指针的控制,由于刚刚建立的队列为空,故先将front和rear指向NULL。 初始化队列 void init(queue q) { q.front =q.rear =NULL; } 判断队列空empty函数 bool empty(queue q) { return q.front==NULL ; } 队列数据的输入是从后端rear进行,其步骤如下: 步骤1:将rear指针所指位置的next指针指向新节点 步骤2:将rear指针移动到新节点之上。 入队addqueue函数

文档评论(0)

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

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

1亿VIP精品文档

相关文档