------
多个数据组成一个有序序列,只能在一端插入,在另一端删除,这样的数据组织方式就叫做队列。又被称为"先进先出表"(FIFO)。
顺序存储:
首先来看用数组实现,分别用两个变量Front和Rear来表示队列的头和尾,一开始都初始化为-1。当有元素入队时(插入数组尾中)Rear向数组尾移动一。当有元素出队时,Front向右移动一,然后将元素移除。
当数组固定了大小的时候,随着元素的添加和删除,当Rear到达数组的末端时,无法再添加元素,但是Front不在数组头,前面还有很多位置,这就造成了假溢出现象,所以我们一般把队列(数组)的头尾相连,组成循环队列,这样就可以避免这样的情况出现。
如何判定队列为空呢?Front等于Rear;
如何判定队列满了呢?Rear(添加一个元素)往后移动一到了Front的位置,此时是队列满的状态,但是这和队列空的判定冲突了。
这是为什么呢?因为我们是用Front和Rear两者之间的位置来表示队列的状态的,这两者之间的位置差距只有n(数组的大小)种情况,但是队列的状态有n+1中(0,1,2...n)。
所以我们有两种方法:
一是多加一个变量,记录当前队列中元素个数,或者是最后一次操作,依次来区分队列空和满的状态。
二是少用一个位置,当Rear+1 == Front