【C语言数据结构】循环队列(数组版,简单易懂!)

#include <stdio.h>//循环队列
#define MAXSIZE 5

typedef struct queue
{
    int front;//队列中第一个元素的位置
    int rear;//下一个要插入元素(节点)的位置
    int data[MAXSIZE];//数据域
}Queue;

Queue* initQueue()//添加空队列
{
    Queue* Q=(Queue*)malloc(sizeof(Queue));
    Q->front=Q->rear=0;
    return Q;
}
int isFull(Queue* Q)//判断是否已经满队了
{
    if((Q->rear+1)%MAXSIZE==Q->front)
    {
        return 1;
    }
    else
        return 0;
}
int enQueue(Queue* Q,int data)//进队
{
    if(isFull(Q))
    {
        return 0;
    }
    else
    {
        Q->data[Q->rear]=data;
        Q->rear=(Q->rear+1)%MAXSIZE;//循环队列的操作
        return 1;
    }
}
int isEmpty(Queue* Q)//判断是否为空队列
{
    if(Q->rear==Q->front)
    {
        return 1;
    }
    else
        return 0;
}
int deQueue(Queue* Q)//出队
{
    int data;
    if(isEmpty(Q))
    {
        return -1;
    }
    else
    {
        data=Q->front[Q->data];
        Q->front=(Q->front+1)%MAXSIZE;
        return data;
    }
}
void printQueue(Queue* Q)//输出队列元素
{
    //int len=Q->rear-Q->front;//Q->rear未到最后一个空节点前(即队列未满时可用),不建议先使用
    int len=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;//取余可以将负数变为正数,队列满时也可以算出正数,建议使用
    int index=Q->front;
    for(int i=0;i<len;i++)
    {
        printf("%d->",Q->data[index]);
        index=(index+1)%MAXSIZE;
    }
    printf("NULL\n");
}
void printQSituation(Queue* Q)//判断是否已满队
{
    int i=isFull(Q);
    if(i==1)
    printf("队列已满\n");
    else
    printf("队列还未满\n");
}
int main()
{
    int chudui=0;
    Queue* Q=initQueue();
    enQueue(Q,1);
    enQueue(Q,2);
    enQueue(Q,3);
    printQSituation(Q);
    printQueue(Q);

    enQueue(Q,4);
    printQSituation(Q);
    printQueue(Q);

    chudui=deQueue(Q);
    printf("出队元素为:%d\n",chudui);
    printQueue(Q);

    return 0;
}

NO.27  有问题评论区见!🌷

<C语言数据结构>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木鳶戾天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值