队列是只允许在一端进行插入(队尾),而在另一端进行删除(队首)的线性表。
先进入队列的元素必然先离开队列.即先进先出(FIFO)
顺序队列:
#define MAXSIZE 50 //队列中元素最大个数
typedef struct {
ElemType data[MAXSIZE]; //存放队列元素
int front,rear; //队头指针和队尾指针
}SqQueue;
循环队列有一个明显的缺点就是假溢出,即队列仍然有空间,但是由于队首不允许插入,导致无法继续插入数据。使用循环队列就可以解决这个问题。
循环队列:
入队:rear=(rear+1)%MAXSIZE
出队:front=(front+1)%MAXSIZE
我们把front=rear仅作为队空的判定条件。当队列满的时候,令数组中仍然保留一个空余单元。我们认为这种情况就是队列满了。
队列满时的等量关系:
(rear+1)%MAXSIZE==front;
队列中元素个数:
(rear-front+MAXSIZE)%MAXSIZE
1.循环队列的入队操作:
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MAXSIZE==Q.front) return false; //队列满
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MAXSIZE;
return true;