队列是队尾添加元素,队头删除元素,先进先出的线性结构,当队列为顺序队列即非循环队列的时候,当队头位置和队尾位置相同都为0的时候,队列为空队列,当队列为循环队列的时候,队列满和空时队头元素位置和队尾元素位置都是相等的。那为什么这个下面的代码可以适用于非循环队列和循环队列呢,原因就在于判断队列为空和满的条件,即当当(rear+1) % MAXSIZE = front时为满这个条件,下面分析一下这个条件就明白是为什么了。首先,在循环队列中有两个方法判断空还是满,一个是使用标记,一个是将队尾的下一个元素位置设置为满的状态,即少用一个位置存储元素,即rear+1的原因,当rear = front的时候队列为空,当(rear+1)%MAXSIZE =front的时候为满,这里的取余操作的意思就是如果rear+1小于MAXSIZE的时候取余就是当前rear+1的值,如果rear+1等于MAXSIZE的值得时候就是0,而此时可能front为0,即代表了队列为满。那么对于非循环队列,道理也是一样的。
#define INITSIZE 100
#define INCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR -1
#define OVERFLOW -1
typedef int Status;
typedef int ElemType;
typedef struct {