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

循环队列c语言版

一、循环队列结构体

typedef int  QueueDataType; 
#define CQ_MAX_SIZE  10typedef struct CircularQueue
{QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue;

二、循环队列操作函数声明


/**创建队列*/
CircularQueue* create_circular_queue();/**队列是否已满*/
bool  isFull(CircularQueue* queue);/**队列是否为空*/
bool  isEmpty(CircularQueue* queue);/**入队列*/
bool  enqueue(CircularQueue* queue,QueueDataType el);/**出队列*/
QueueDataType dequeue(CircularQueue* queue);/**输出队列*/
void show_queue(CircularQueue* queue);/**销毁队列*/
void   destory_queue(CircularQueue* queue);

三、循环队列操作函数定义

/**创建队列*/
CircularQueue* create_circular_queue()
{CircularQueue* queue = (CircularQueue*) malloc(sizeof(CircularQueue));if(queue ==  NULL){perror("CircularQueue分配内存空间失败");return NULL;}queue->head  = 0;queue->rear  = 0;return queue;
}/**队列是否为空*/
bool  isEmpty(CircularQueue* queue)
{return queue->head == queue->rear;
}/**队列是否已满*/
bool  isFull(CircularQueue* queue)
{//  rear是冗余出来的一个空间,置于队尾,用于记当前队中元素的个数return  (queue->rear + 1)%CQ_MAX_SIZE == queue->head;
}/**入队列*/
bool  enqueue(CircularQueue* queue,QueueDataType el)
{if(isFull(queue)){perror("队列已满");return  false;}queue->data[queue->rear%CQ_MAX_SIZE]  = el ;queue->rear++;return true;
}/**出队列*/
QueueDataType dequeue(CircularQueue* queue)
{if(isEmpty(queue)){perror("对列中暂无元素");return -1;}QueueDataType el = queue->data[queue->head%CQ_MAX_SIZE];queue->head++;return el;
}/**输出队列*/
void show_queue(CircularQueue* queue)
{if(isEmpty(queue)){perror("对列中暂无元素");return ;}int i =  queue->head;while ( i < queue->rear){QueueDataType el = queue->data[i%CQ_MAX_SIZE];printf("el=%d\n",el); i++;}
}void   destory_queue(CircularQueue* queue)
{free(queue);
}

四、测试队列

void  test_cricular_queue()
{CircularQueue *quque = create_circular_queue();QueueDataType arr[] =  {11,21,31,41,51,61,71,81,91,101};int  i = 0;for(;i<10;i++){enqueue(quque,arr[i]);}show_queue(quque);QueueDataType  el = dequeue(quque);printf("取出队列元素el=%d\n",el);destory_queue(quque);
}

运行结果:

http://www.lryc.cn/news/205095.html

相关文章:

  • SprringMVC拦截器
  • redis的实际使用
  • 造车先做三蹦子-之二:自制数据集(5x5数据集)230102
  • JS操作DOM及CSS
  • Linux内核VFS详解
  • 在自己的服务器上部署个人博客和开源项目:实现数字存在感
  • 【AI视野·今日Robot 机器人论文速览 第五十九期】Fri, 20 Oct 2023
  • Chromium浏览器启动参数
  • 【计算机视觉】MoCo v3 讲解
  • MySQL - 对字符串字段创建索引
  • Qt pro文件中 CONFIG += debug 作用
  • java解析生成定时Cron表达式工具类
  • 庆祝1024
  • 时间格式记录
  • hive插入动态分区数据时,return code 2报错解决
  • 解决报错:gnutls_handshake() failed: The TLS connection was non-properly terminated.
  • 《 汇编语言的系统学习》一、编程语言、机器语言与汇编语言
  • 【RocketMQ系列十四】RocketMQ中消息堆积如何处理
  • Ubuntu - sudo apt update 报错源问题解决方案
  • MSQL系列(八) Mysql实战-SQL存储引擎
  • vue3 + fastapi 实现选择目录所有文件自定义上传到服务器
  • html 常见兼容性问题
  • PCL 点云投影到圆柱(C++详细过程版)
  • 以太网链路聚合与交换机堆叠,集群
  • 5G RedCap工业智能网关
  • STM32-ADC实验
  • 05、Python -- 爬取ts文件格式视频思路
  • 【QT】其他常用控件2
  • django报错--Not Found The requested URL was not found on the server.
  • VLOOKUP函数的使用方法