给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置。为了有效地利用空间,引入循环队列(环状)。
在循环队列中,如果队列中最后一个结点存放在数组的最后一个元素位置,而数组前面有空位置的话,则下次在进行插入操作时,将插入到数组最前面那个元素的位置。其他情况下的插入操作和一般的队列的插入操作一样。
如果再插入一个新的结点,则数组空间将全部被占用,队列已满,且rear == front。
若删除一个结点,队列成为空队列,也有 rear == front。
如何区别?
方法一:
设置一个标志。由于rear+1使rear==front -> 满队列
由于 front +1 使rear == front -> 空队列
方法二:
牺牲一个数组元素的空间,即若数组大小为MAXSIZE,该数组所表示的循环队列最多允许储存MAXSIZE-1个结点。
循环队列满的条件:(rear+1)%MAXSIZE == front
循环队列空的条件: rear == front
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 5;
typedef struct
{
int a[MAXSIZE];
int fron