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

c语言写的环形队列

        以下是一个简单的环形队列的实现示例,包括初始化、入队、出队、查询当前元素个数、队列长度和队列元素可视化。

        这里使用了静态数组来实现队列的存储,适合于固定大小的队列。

#include <stdio.h>
#define MAX_QUEUE_SIZE 10  // 定义队列的最大容量
typedef struct {    
int data[MAX_QUEUE_SIZE];  // 队列的数据数组    
int front;  // 队头指针,指向队首元素的位置    
int rear;   // 队尾指针,指向队尾元素的下一个位置    
int count;  // 队列当前元素个数
}CircularQueue;
// 初始化队列
void initQueue(CircularQueue *queue) {    
queue->front = 0;    
queue->rear = 0;    
queue->count = 0;
}
// 入队操作
void enqueue(CircularQueue *queue, int value) {    
if (queue->count >= MAX_QUEUE_SIZE) {        
printf("队列已满,无法入队!\n");        
return;    
}    
queue->data[queue->rear] = value;    
queue->rear = (queue->rear + 1) % MAX_QUEUE_SIZE;  // 更新rear指针,注意取模操作    
queue->count++;
}
// 出队操作
int dequeue(CircularQueue *queue) {    
if (queue->count <= 0) {        
printf("队列为空,无法出队!\n");        
return -1;  // 返回一个特殊值表示出错    
}    
int value = queue->data[queue->front];    
queue->front = (queue->front + 1) % MAX_QUEUE_SIZE;  // 更新front指针,注意取模操作    
queue->count--;    
return value;
}
// 查询当前队列元素个数
int queueCount(CircularQueue *queue) {    
return queue->count;
}
// 查询队列长度(最大容量)
int queueLength() {    
return MAX_QUEUE_SIZE;
}
// 打印队列元素(可视化)
void printQueue(CircularQueue *queue) {    
printf("队列中的元素为:");    
int i = queue->front;    
int cnt = 0;    
while (cnt < queue->count) {        
printf("%d ", queue->data[i]);        
i = (i + 1) % MAX_QUEUE_SIZE;        
cnt++;    
}    
printf("\n");
}
// 示例程序int main() {    
CircularQueue queue;    
initQueue(&queue);
    enqueue(&queue, 1);    
enqueue(&queue, 2);    
enqueue(&queue, 3);    
printQueue(&queue);  // 输出:队列中的元素为:1 2 3
    dequeue(&queue);    
printQueue(&queue);  // 输出:队列中的元素为:2 3
    printf("当前队列元素个数:%d\n", queueCount(&queue));  // 输出:当前队列元素个数:2    
printf("队列长度:%d\n", queueLength());  // 输出:队列长度:10
    return 0;
}

==============================================

可以正常运行:

队列中的元素为:1 2 3 队列中的元素为:2 3 当前队列元素个数:2队列长度:10

http://www.mrgr.cn/news/27605.html

相关文章:

  • ISP是什么?
  • Android从Drawable资源Id直接生成Bitmap,Kotlin
  • 【freertos】FreeRTOS时间管理
  • hive alter table add columns 是否使用 cascade 的方案
  • 机器学习、深度学习面试知识点汇总
  • Axure网络短剧APP端原型图,竖屏微剧视频模版40页
  • 基于BiGRU+Attention实现风力涡轮机发电量多变量时序预测(PyTorch版)
  • 三种mybatis表的列名和对象属性名不一致处理方法
  • java项目之基于工程教育认证的计算机课程管理平台(源码+论文)
  • F5设备绑定EIP
  • 【Vue】2
  • 国风编曲:了解国风 民族调式 五声音阶 作/编曲思路 变化音 六声、七声调式
  • Qt:懒汉单例(附带单例使用和内存管理)
  • 【软考】扩充的ER模型
  • Autosar E2E通信保护简介
  • QT添加图标标题和打包项目
  • 差分算法搞不懂?这篇文章带你飞
  • 通过 Docker 部署 WordPress 服务器
  • 【漏洞复现】用友 U8-cloud ActionServlet sql注入漏洞
  • lvs-dr模式实验详解
  • python注释知识点及用法讲解
  • 结构体指针
  • 计算机专业毕业设计选题指南:避开这些坑,让你轻松毕业-附选题推荐(精选题目汇总大全)
  • 【leetcode】树形结构习题
  • 小阿轩yx-案例:Zabbix监控kubernetes云原生环境
  • 安全区域边界等保测评