循环队列比单链表实现队列会稍微要难理解一点,但是弄懂了其中的原理,就不会感觉到困难啦~~~
循环队列的结构体:用count来记录元素的个数容易判断队列是否是空或者满。
typedef struct queue{
int count; //记录元素个数
int front; //队首
int rear; //队尾
int data[MAX_SIZE]; //记录元素的值
}Queue;
队首、队尾在数组中的位置,循环链表主要是想表现不浪费空间,如果我们用数组但是不循环的话,出队后front会往上一动一个单位,那么下面的空间就无法利用到了,这是做循环链表的一个优势。
当我们入队出队会遇到下图的情况,队首在队尾的上面,那么我们怎么继续出队或者入队呢?
出队:队列出队front要+1,那么当front大于我们数组的长度的时候要怎么样取像图中值为23这个位置的数组下标呢?