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

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.kler.cn/a/306189.html

相关文章:

  • 【C++】string类(附题)
  • git没有识别出大写字母改成小写重命名的文件目录
  • Java 责任链模式 减少 if else 实战案例
  • 【excel】easy excel如何导出动态列
  • PyTorch深度学习与企业级项目实战-预训练语言模型GPT
  • C++单例模式与多例模式
  • emWin5的图片半透明之旅
  • 高级java每日一道面试题-2024年9月12日-架构篇[DDD领域驱动篇]-如何使用领域驱动设计(DDD)中的事务脚本模式?
  • Spring4-IoC2-基于注解管理bean
  • comfyui中,sam detector与yoloworld图像分割算法测试以及影响
  • [极客大挑战 2019]PHP
  • 1、常用的数据库、表操作
  • 蒸!--数据在内存中的存储
  • node express 开启多进程
  • python多线程程序设计 之二
  • C#获取计算机信息
  • C++入门基础知识68(高级)——【关于C++ 异常处理】
  • 【系统架构设计师-2010年真题】案例分析-答案及详解
  • Superset二次开发之源码asyncEvent.ts 分析
  • 嵌入式C语言自我修养:C语言的面向对象编程思想
  • 问题 H: 三角数
  • 【在Linux世界中追寻伟大的One Piece】五种IO模型和阻塞IO
  • 13. 神经网络基本骨架--nn.Module
  • 长业务事务的离线并发问题
  • 9. 什么是 Beam Search?深入理解模型生成策略
  • leetcode 难度【简单模式】标签【数据库】题型整理大全