队列包含两种:
1、动态队列。(是链表实现,不存满的情况。默认链表可以无穷大。
2、静态队列。(数组实现。难道较上面的大。本文也是讲此种 :静态循环队列
静态循环队列
typedef struct Queue
{
int *pBase;///数组(应为数组的名字也是第一个元素的指针
int front;头下标
int rear; //尾下标
int leng; //长度
}QUEUE, *pQueue;
//静态队列(Queue)的数据结构的定义
front;//头下标:永远指向数组里的第一个元素的位置。
rear; //尾下标: 指向数组里的最后一个元素的下一个元素。
每次添加一个元素时rear 向后一个单位。
每次删除一个元素时front 向后移动一个单位。
当front和rear再次相等时,队列填满。(初始化时也是相等的)
因为每次+1移动,但当移动到最后一位时,在+1就会造成数组越界。所以最后一位应当在移动到第一位。
而用% 取余,刚好完美适配。
pQ ->rear = (pQ ->rear +1)%pQ->leng;//尾位置移动
同理,front.也是如此。
源码参见:C-Queue
来源:郝斌老师的视频 供自己复习参考用