循环队列

循环队列

标签(空格分隔): 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;
}
posted @ 2023-06-02 02:19  刘倩_网安2211  阅读(40)  评论(0编辑  收藏  举报