什么是队列?
队列(queue)是一种先进先出(FIFO)的数据结构。就如生活中排队一样,先排的人在队伍的最前面,后排的人在队伍的最后面。
队列的实现方式
队列的实现方式分为数组和链表两种
数组的方式实现队列需要两个指针,指向对头的front,指向队尾的rear。由于队列是对的头部删除,队的尾部插入数据,当我们在删除数据之后,数据并不会自动去补齐前面已经删除的空白的位置,这就导致有的时候整个数组并没有多少元素,但是已经不能插入数据了。从而造成资源的浪费!如果在元素出队的过程中,不断地移动元素,这样复杂所需资源非常大,也是不好的实现方法。这个时候,我们找到了另外一种实现方法:循环数组。
如下图所示,就是典型的循环数组的样子。左边为空循环队列,右边为满循环队列。但是我们仅仅用rear==front是无法判断这个队列是否是满还是空的,一般我们有两种方法,第一种是引入一个新变量,来记录队列元素的个数,插入元素加1,删除元素减1,清空队列就置0;另外一种就是定义“满”的含义,在数组中定义一个元素始终不使用,当队列满的时候,front和rear的值就不可能相同了。
当我们采用第二种方法时,我们让rear比front小1,这样就可以解决问题了。
当满足下面条件时,队列为空:(rear+1)%QUEUE_SIZE== front
当满足下面条件时,队列为满:(rear+2)%QUEUE_SIZE== front