队列仅在线性表两端进行操作;
队头(Front):取出数据的一端;
队尾(Rear):放入数据的一端;
循环队列:
1.队列顺序存储的不足:
避免出现只有一个元素时,队头和队尾的重合处理麻烦,
引入front指向队头元素,rea指向队尾元素的下一个位置;
front=rear时,队列不是还剩一个元素,而是空队列;
2.循环队列定义:
把头尾相接的顺序存储结构称为循环队列;
判断队列满的条件:
(rear+1)%QueueSize==front;
通用的计算队列长度公式为:
(rear-front+QueueSize)%QueueSize;
typedef struct {
int data[MAXSIZE];
int front;
int rear;
}SqQueue;
循环队列的入队列:
int EnQueue(SqQueue *Q, int e)
{
if((Q->rear+1)%MAXSIZE ==Q->front)
return ERROR;
Q->data[Q->rear] = e;
Q->rear=(Q->rear+1)%MAXSIZE;
return OK;
}
循环队列的出队列:
int DeQueue(SqQueue *Q, int *e)
{
if(Q->rear==Q->front)
return ERROR;
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}