循环队列
循环队列
标签(空格分隔): DS 队列 顺序存储
1.循环队列的顺序存储结构
typedef struct
{
int data[MAXSIZE];
int front;//队头指针
int rear;//尾指针,指向队尾元素下一个位置,若为空队列,则rear==front
}* SqQueue;
2.循环队列的初始化代码
//初始化为空队列
Status InitQueue(SqQueue Q)
{
Q->front=0;
Q->rear=0;
return OK;
}
3.循环队列求队列长度
int QueueLength(SqQueue Q)
{
int length=0;
length=(Q->rear+MAXSIZE-Q->front)%MAXSIZE;
return length;
}
4.循环队列的入队操作
思路:
1.判断是否满队
2.若不满,则在队尾入队,并将指针rear后移
3.若rear假溢,则转到数组头部
Status 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;
}
5.循环队列的出队操作
思路:
1.判断是否空队列
2.若不空,则将队头元素(出队元素)用指针e返回,并将指针front后移
3.若front假溢,则转到数组头部
Status DeQueue(SqQueue Q, int* e)
{
if(Q->front==Q->rear)
return ERROR;
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}