数据结构基础(5)–队列和循环队列详解–静态方式

最后更新于:2022-04-01 11:18:47

## 队列的具体应用:  所有和事件有关的操作都有队列的影子。 (例如操作系统认为先进来的先处理) ## 定义: 一种可是实现“先进先出”的存储结构 ## 分类: 链式队列:用链表实现  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_57172835218e3.jpg) 静态队列:用数组实现 静态队列通常都必须是循环队列,为了减少内存浪费。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_5717283532751.jpg) ## 循环队列 : ### 1、静态队列为什么必须是循环队列 如果用传统意义的数组实现队列,无论入队还是出队,rear和front指针只能+不能-; 比 F元素下标小的的数组元素下标就浪费了。 ###循环队列怎么用呢? ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_5717283544e04.jpg) 当出现这种情况时,如果仍然需要插入元素,那么f指向下一个位置,即5,r指向下一个位置即0.如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571728355c5ec.jpg) 那么,我们在插入一个元素“国”,然后再删除中呢? ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_571728356f03b.jpg) 这就是所谓的循环队列。 ### 2、    循环队列需要几个参数来确定 及其含义 需要2个参数来确定 front rear   ### 3、 循环队列各个参数的含义 2个参数不同场合不同的含义?    建议初学者先记住,然后慢慢体会 1)队列初始化 front和rear的值都是零,初始化时队列就是空的。 2)队列非空 front代表队列的第一个元素 rear代表了最后一个有效元素的下一个元素 3)队列空 front和rear的值相等,但是不一定是零 ### 4、循环队列入队伪算法讲解 需要判断r是否指向数组最后一个元素。 两步完成: 1)将值存入r所代表的位置 2)将r后移,正确写法是rear = (rear+1)%数组长度 错误写法:rear=rear+1;   ### 5、 循环队列出队伪算法讲解  front = (front+1)% 数组长度 ### 6、 如何判断循环队列是否为空 如果front与rear的值相等, 则队列一定为空 ### 7、 如何判断循环队列是否已满 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-20_5717283583260.jpg) 上图这种情况,如果再插入f,r指向同一个元素。如果这样的话就不能判断队列是空还是满。 所以为了判断循环队列是否已满,有一下两种方式: 1、多增加一个表标识的参数 2、少用一个队列中的元素(才一个,不影响的) 如果r和f紧挨着(r的下一个位置是f),则队列已满 用C语言描述: If((r+1)%数组长度)==f   队列已满 Else   队列不满
';