当前位置: 首页 > news >正文

[数据结构]设计循环队列

思路展示:

代码实现:

typedef struct {
    int *a;
    int front;
    int rear;
    int k;
} MyCircularQueue;


bool myCircularQueueIsEmpty(MyCircularQueue* obj);


bool myCircularQueueIsFull(MyCircularQueue* obj);
MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    obj->front=obj->rear=0;
    obj->a=(int *)malloc(sizeof(int)*(k+1));
    obj->k=k;
    return obj;
}


bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if(myCircularQueueIsFull(obj))
    {
        return false;
    }
    obj->a[obj->rear]=value;
    obj->rear++;
    obj->rear%=(obj->k+1);
    return true;
}


bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
    {
        return false;
    }
    ++obj->front;
    obj->front%=(obj->k+1);
    return true;
}


int myCircularQueueFront(MyCircularQueue* obj)//取第一个元素
{
    if(myCircularQueueIsEmpty(obj))
    {
        return -1;
    }else
    {
        return obj->a[obj->front];
    }
}


int myCircularQueueRear(MyCircularQueue* obj) {
    //return obj->a[obj->rear-1];  不能这样访问,如果这样访问那么当rear移动到开头那么rear-1就是-1就是越界访问了
    if( myCircularQueueIsEmpty(obj))
    {
        return -1;
    }else{
        return obj->a[(obj->rear-1+obj->k+1)%(obj->k+1)];//如果rear-1>0那么rear-1+k再模k是不变的
    }
}


bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    return obj->front==obj->rear;
}


bool myCircularQueueIsFull(MyCircularQueue* obj) {
    return (obj->rear+1)%(obj->k+1)==obj->front;
}


void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->a);
    free(obj);
}

相关文章:

  • 【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】
  • SpringMvc与Struts2
  • 【Linux】命名管道
  • 影刀RPA开发拓展--正则表达式
  • transformer架构解析{模型基本测试}(含代码)-9
  • 软件测试(三)——Bug篇
  • 002.words and phrases
  • 通过多线程获取RV1126的AAC码流
  • CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现
  • 磁盘空间用尽导致的系统500错误(failed to openstream:No space left on device)
  • Android14 OTA差分包升级报kPayloadTimestampError (51)
  • 使用 Deepseek + kimi 快速生成PPT
  • 通过计费集成和警报监控 Elasticsearch Service 成本
  • 宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪
  • HDFS 为什么不适合处理小文件?
  • PMP项目管理—沟通管理篇—补充内容
  • Java常用正则表达式(身份证号、邮箱、手机号)格式校验
  • 大模型gpt结合drawio绘制流程图
  • 大数据技术基于聚类分析的消费者细分与推荐系统
  • AORO P9000 PRO三防平板携手RTK高精度定位,电力巡检效率倍增
  • 企业做网站的困惑/seo关键词推广价格
  • 哪些网站是同字形网页/企业建站要多少钱
  • 铜陵市企业网站建设/游戏推广公司
  • 网站无icp备案/外贸平台自建站
  • wordpress8小时前/seo外链论坛
  • 大连手机自适应网站建设/营销策划方案ppt范文