2023-03-31-顺序队列SqQueue的基本操作

发布时间 2023-03-31 19:13:51作者: 正方形的被子
//基本顺序队列

#include <stdio.h>
#include <stdbool.h>

#define MAXSIZE 50

typedef struct
{
    int data[MAXSIZE];
    int front,rear;
}SqQueue;

void initSqQueue(SqQueue *Q)//进行队的初始化
{
    Q->front=0;
    Q->rear=0;
}

bool isEmpty(SqQueue *Q)//判断队伍是否为空
{
    if(Q->front==Q->rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool EnQueue(SqQueue *Q,int e)//进队
{
    if(Q->rear==MAXSIZE)//判断队是否已满,rear是最后一个元素的位置+1
    {
        return false;
    }
    else
    {
        Q->data[Q->rear]=e;//先进行赋值操作
        Q->rear++;//再进行++
        return true;
    }
}

bool DeQueue(SqQueue *Q,int *e)//出队操作,将值赋给e
{
    if(isEmpty(Q))
    {
        return false;
    }
    else
    {
        *e=Q->data[Q->front];
        Q->front++;//front上移
        return true;
    }
}

int QueueLength(SqQueue Q)//求队伍长度
{
    return (Q.rear-Q.front);
}

int main()
{
    SqQueue Q;
    initSqQueue(&Q);
    int x;
    for(int i=0;i<5;i++)
    {
        scanf("%d",&x);
        EnQueue(&Q,x);
    }

    int *e;
    int a=0;
    e=&a;

    DeQueue(&Q,e);
    printf("DeQueue_value: %d\n",*e);
    printf("Q.front: %d Q.rear: %d\n",Q.front,Q.rear);
    printf("First elem: %d\n",Q.data[Q.front]);
    printf("QueueLength: %d\n",QueueLength(Q));
    return 0;
}