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

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

相关文章:

  • AMD 8845HS 780M核显部署本地deepseek大模型的性能
  • 学习数据结构(8)双向链表
  • 对接DeepSeek
  • android的DataBinding的使用
  • iPhone 在华销量大幅下挫
  • RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构
  • Docker 部署 RabbitMQ | 自带延时队列
  • leetcode 做题思路快查
  • Docker 部署 Grafana 教程
  • LeetCode-二叉树展开为链表
  • 【实用技能】如何借助3D文档控件Aspose.3D, 在Java中无缝制作 3D 球体
  • Maven入门核心知识点总结
  • Maven 下载与配置教程:附百度网盘地址
  • brpc之Butex
  • windows11上,使用pipx安装Poetry,Poetry的安装路径是什么?
  • 数据结构与算法--实现链表的复制(链表中节点比较特殊,含有一个rand指针,指向任意一个节点)
  • 电脑运行黑屏是什么原因?原因及解决方法
  • PM2 与 Docker 结合使用:Node.js 应用的高效管理与部署
  • 项目的虚拟环境的搭建与pytorch依赖的下载
  • MyBatis-Plus快速使用
  • 【在线优化】【有源程序】基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略
  • PHP的filter_var函数的安全问题
  • 相机开启状态下拔出SD卡导致的数据丢失问题及恢复方法
  • 蓝桥杯小白打卡第三天
  • 最短路径问题-------Dijkstra算法
  • 一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示