首页 > 其他分享 >循环队列

循环队列

时间:2023-08-12 21:44:50浏览次数:40  
标签:enqueue 队列 int 循环 printf front cq rear

C语言实现

#include <stdio.h>
#define MAX_SIZE 10

typedef struct {
    int queue[MAX_SIZE];
    int front;
    int rear;
} CircularQueue;

void initializeQueue(CircularQueue *cq) {
    cq->front = -1;
    cq->rear = -1;
}

int isEmpty(CircularQueue *cq) {
    return cq->front == -1;
}

int isFull(CircularQueue *cq) {
    return (cq->rear + 1) % MAX_SIZE == cq->front;
}

void enqueue(CircularQueue *cq, int item) {
    if (isFull(cq)) {
        printf("Queue is full. Cannot enqueue.\n");
        return;
    }

    if (isEmpty(cq)) {
        cq->front = 0;
    }

    cq->rear = (cq->rear + 1) % MAX_SIZE;
    cq->queue[cq->rear] = item;
}

int dequeue(CircularQueue *cq) {
    if (isEmpty(cq)) {
        printf("Queue is empty. Cannot dequeue.\n");
        return -1;
    }

    int item = cq->queue[cq->front];

    if (cq->front == cq->rear) {
        cq->front = -1;
        cq->rear = -1;
    } else {
        cq->front = (cq->front + 1) % MAX_SIZE;
    }

    return item;
}

void display(CircularQueue *cq) {
    if (isEmpty(cq)) {
        printf("Queue is empty.\n");
        return;
    }

    int i = cq->front;
    do {
        printf("%d ", cq->queue[i]);
        i = (i + 1) % MAX_SIZE;
    } while (i != (cq->rear + 1) % MAX_SIZE);
    printf("\n");
}

int main() {
    CircularQueue cq;
    initializeQueue(&cq);

    enqueue(&cq, 1);
    enqueue(&cq, 2);
    enqueue(&cq, 3);
    enqueue(&cq, 4);
    enqueue(&cq, 5);

    printf("Queue elements: ");
    display(&cq);

    printf("Dequeue: %d\n", dequeue(&cq));
    printf("Dequeue: %d\n", dequeue(&cq));

    printf("Queue elements after dequeue: ");
    display(&cq);

    enqueue(&cq, 6);
    enqueue(&cq, 7);

    printf("Queue elements after enqueue: ");
    display(&cq);

    return 0;
}

标签:enqueue,队列,int,循环,printf,front,cq,rear
From: https://www.cnblogs.com/ffopen/p/17625580.html

相关文章

  • TZOJ3326--Barn Repair(优先队列,贪心)
    题目简述: 某天刮了一阵大风,把牛棚的门吹飞了,总共有s个牛棚,幸运的是并不是每个牛棚都有牛。现在你可以购买m块木板,商店里有各种型号的木板,木板长度为多少就需要多少金钱。木板用来给牛棚装上门。要求把所有有牛的牛棚都装上门,并且花的金钱最少。给了一正整数C,接下来C行每行一......
  • 2308-习题 分支循环,goto语句
    1.习题3.1.输入三个整数,从大到小输出这三个数 1#define_CRT_SECURE_NO_WARNINGS2#include<stdio.h>3intmain()4{56inta=0;7intb=0;8intc=0;9inttemp=0;10scanf("%d%d%d",&a,&b,&c);11......
  • 从Spring源码看Spring如何解决循环引用的问题
    Spring如何解决循环引用的问题关于循环引用,首先说一个结论:Spring能够解决的情况为:两个对象都是单实例、且通过set方法进行注入。两个对象都是单实例,通过构造方法进行注入,Spring不能进行循环引用问题;两个对象都是多实例的情况下,不管是set注入,还是构造注入,都不能解决Spring循环......
  • P1631 序列合并[优先队列]
    P1631序列合并这个没做出来属实有些惭愧。看了题解觉得很妙。如果直接想的话可能反而很麻烦题目是给两个n个数的不下降序列,问这两个序列任意各取出一个后相加的最小的n个数是什么。直接贴题解吧题解P1631【序列合并】一共会产生n*n个数,a[1]+b[1]<=a[1]+b[2]........<=a[1......
  • 不使用循环语句用if和else实现循环
    如果不使用循环语句,可以使用递归函数来实现循环的效果。递归函数是指在函数内部调用自身的函数。下面是一个使用递归函数来实现循环的示例:(初学者记得写include,这里是个普通函数,所以我没写)defloop(count):ifcount<5:ifcount%2==0:......
  • go1.21循环中的变量有变化
    最近发了go1.21.0,听说循环中的变量有变化,跑一下看看。1.21.0默认还是和之前一样的。通过设置goenv-wGOEXPERIMENT=loopvar让新语义生效packagemainimport( "fmt" "sync/atomic" "time")funcmain(){ varis[]int32 fori:=int32(0);i<10;i++{ is......
  • 代码随想录算法训练营第十天|力扣232.用栈实现队列、力扣225.用队列实现栈
    栈与队列理论知识栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set或者map提供迭代器iterator来遍历所有元素。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制......
  • Feign和消息队列(MQ)的区别
    Feign和消息队列(MQ)是两个不同的概念,它们分别用于不同的目的。下面我将分别介绍它们的作用和特点。Feign是一个在微服务架构中用于实现服务间通信的轻量级、声明式的HTTP客户端。它由Netflix开源,并且与SpringCloud集成得非常紧密。Feign可以让开发人员以类似于编写本地方法调用的......
  • 单调队列
    单调性的原理可以用一句没有啥道理的但又有点道理的话理解:如果一个人比你小还比你强,你就永远打不过他了。最大子序和输入一个长度为\(n\)的整数序列,从中找出一段长度不超过\(m\)的连续子序列,使得子序列中所有数的和最大。注意:子序列的长度至少是\(1\)。转换成前缀和选......
  • 复习消息队列之RabbitMQ
    概念:RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。对比:RabbitMQ对......