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

2025_2_9 C语言中队列

1.队列(先进先出)

队列也是一种受限制的线性结构
它只能在一端添加元素,在另一端访问,删除元素
(队首插入,队尾删除)
因为链表实现没有数组实现快,所以队列大多数是用数组实现的
在这里插入图片描述
queue.h

#pragma once
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define E int
#define CAPACITY 10
typedef struct {E elements[CAPACITY];//数组int fornt;//队首int rear;//队尾int size;//长度
}Queue;Queue* queue_create();
void queue_destroy(Queue* q);bool is_empty(Queue* q);
bool is_full(Queue* q);
bool enqueue(Queue* q, E element);
E dequeue(Queue* q);
E peek(Queue* q);

queue.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"queue.h"
Queue* queue_create() {return calloc(1, sizeof(Queue));
}
void queue_destroy(Queue* q) {free(q);
}bool is_empty(Queue* q) {return q->size == 0;
}
bool is_full(Queue* q) {return q->size == CAPACITY;
}
bool enqueue(Queue* q, E element) {if (is_full(q)) {printf("error:Queue is full\n");exit(1);}q->elements[q->rear] = element;q->rear = (q->rear + 1) % CAPACITY;q->size++;return true;
}
E dequeue(Queue* q) {if (is_empty(q)) {printf("error:Queue is emppty\n");exit(1);}E ele = q->elements[q->fornt];q->fornt = (q->fornt + 1) % CAPACITY;q->size--;return ele;
}
E peek(Queue* q) {if (is_empty(q)) {printf("error: Queue is empty\n");exit(1);}return q->elements[q->fornt];
}

main.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"queue.h"
int main() {Queue* q = queue_create();if (q == NULL) {printf("realloc failed in queue_create()\n");exit(1);}enqueue(q, 1);enqueue(q, 2);enqueue(q, 3);enqueue(q, 4);while (!is_empty(q)) {E ele = peek(q);printf("%d ", ele);dequeue(q);}printf("\n");return 0;
}
http://www.lryc.cn/news/533892.html

相关文章:

  • [图文]DeepSeek能做对《软件方法》的测试题吗?
  • 推荐个Deepseek网站
  • 【Linux开发工具】C/C++ 在Linux下的编译器-gcc/g++
  • hmi界面:工业设计风格如何识别,有什么应用场景。
  • NIO三大组件
  • pytest.fixture
  • MHTML文件如何在前端页面展示
  • 学习笔记:在华为云ModelArts上运行MindSpore扩散模型教程
  • 使用sharding-jdbc实现读写分离
  • “图像识别分割算法:解锁视觉智能的关键技术
  • 【Go语言快速上手】第二部分:Go语言进阶
  • GRN前沿:GRETA:从多模式单细胞数据推断基因调控网络方法的比较与评价
  • python基础入门:4.4模块与包管理
  • 《XSS跨站脚本攻击》
  • LC-两数之和、字母异位词分组、最长连续序列、移动零、盛最多水的容器
  • Netty源码解析之线程池的实现(二):创建线程与执行任务
  • IDEA - 一个启动类多次启动方法
  • U3D支持webgpu阅读
  • C++广度优先搜索
  • SVN 提交与原有文件类型不一样的文件时的操作
  • 活动预告 | Power Hour: Copilot 引领商业应用的未来
  • WPF 进度条(ProgressBar)示例一
  • 【C#】任务调度的实现原理与组件应用Quartz.Net
  • UV - Python 包管理
  • pytorch torch.linalg模块介绍
  • 光伏-报告显示,假期内,硅料端签单顺序发货相对稳定。若3月份下游存提产,则不排除硅料价格有上调预期。
  • 【web自动化】指定chromedriver以及chrome路径
  • 顺丰数据分析(数据挖掘)面试题及参考答案
  • Android studio:顶部导航栏Toolbar
  • mmap 文件映射