宿州网站建设哪家公司好,推荐一些可以做笔试题的网站,外贸网站服务器选择,软件开发项目流程静态队列- --用数组实现 静态队列通常都必须是循环队列
循环队列的讲解:
1.静态队列为什么必须是循环队列#xff1f;
数组表示的问题 对于队列最好的方法是使用链表实现#xff0c;因为对于数组来说#xff0c;队列可能会出现下面这种情况#xff1a; 如图所示#…静态队列- --用数组实现 静态队列通常都必须是循环队列
循环队列的讲解:
1.静态队列为什么必须是循环队列
数组表示的问题 对于队列最好的方法是使用链表实现因为对于数组来说队列可能会出现下面这种情况 如图所示不可以继续添加元素否则会造成数组越界而遭致程序出错。然而此时又不应该扩充数组因为还有大量实际空间未被占用。
此时我们应该如何解决这个问题呢我们将其实现为循环队列。
理解循环队列 何谓循环队列首先我们要说明的是循环队列仍然是基于数组实现的。但是为了形象化的说明问题我们如下图所示 1.图中有两个指针(其实就是两个整数型变量因为在这里有指示作用所以这里理解为指针)front、rear,一个指示队头一个指示队尾。
2.rear和front互相追赶着这个追赶过程就是队列添加和删除的过程如果rear追到head说明队列满了如果front追到rear说明队列为空。 说明 令队列空间中的一个单元闲置使得队列非空时Q.rear与Q.front之间至少间隔一个空闲单。 3.我们把它掰弯用的是求余这样两个值就不会跑出最大范围并且可以实现弯曲的效果所以说对于循环队列我们必须给定最大值MAXQSIZE。
这其实是我们臆想的反正我们要做的就是利用循环来解决空间浪费的问题。
循环队列的实现过程 ☆当添加一个元素时,(rear1)%MAXQSIZE; //理解为什么求余 ☆当删除一个元素时,(front1)%MAXQSIZE//理解为什么求余 ☆当rearfront的时候队列可能是满也可能是空。 因为存在满和空两种情况我们需要分别判断 ☆满当队列添加元素到rear的下一个元素是head的时候也就是转圈子要碰头了我们就认为队列满了。(Q.rear1)%MAXSIZEQ.front ☆空当队列删除元素到headrear的时候我们认为队列空了。Q.rearQ.front,不一定为0 图示 队列操作的一些说明
队列长度Q.rear-Q.front
队头元素Q.base[Q.front]
队尾元素Q.base[Q.rear-1] 2.循环队列需要几个参数来确定
需要2个参数来确定 front ——指向队头 rear ——指向队尾 3.循环队列各个参数的含义
2个参数不同场合有不同的含义 建议初学者先记住然后慢慢体会 1).队列初始化 front和rear的值都是零 2).队列非空 front代表的是队列的第一个元素 rear代表的是队列的最有一个有效元素的 3) .队列空 font和rear的值相等但不一定是零
4.循环队列入队伪算法讲解 链表队列入门介绍 链表队列初始化 链表队列入队算法
5.循环队列出队伪算法讲解 链表队列出队算法
6.如何判断循环队列是否为空
如果front与rear的值相等,则该队列就一定为 空
7.如何判断循环队列是否已满