2025_2_9 C语言中队列

news/2025/2/10 14:26:15/

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.ppmy.cn/news/1570878.html

相关文章

火语言RPA--XML提取

&#x1f6a9;【组件功能】&#xff1a;在XML文本中提取通过XML选择器提取指定节点内容 配置预览 配置说明 源XML文本 支持T或# 默认FLOW输入项 提取处理的对象&#xff0c;若为空&#xff0c;以上一个组件的输出做为源XML文本&#xff0c;支持文本或表达式输入。 XmlPath选…

wxWidgets生成HTML文件,带图片转base64数据

编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

MyBatis-Plus与PageHelper的jsqlparser库冲突问题

背景介绍 在最近的一个项目中&#xff0c;我们决定将Spring Boot升级至3.x版本&#xff0c;并同时升级了MyBatis-Plus到最新版本&#xff08;3.5.7&#xff09;。然而&#xff0c;在完成这些升级之后&#xff0c;我们遇到了一个问题&#xff1a;分页插件PageHelper无法正常工作…

【声音转文字CapsWriter】声音随时转化为文字,CapsWriter提高工作效率

文章目录 前言1. 软件与模型下载2. 本地使用测试3. 异地远程使用3.1 内网穿透工具下载安装3.2 配置公网地址3.3 修改config文件3.4 异地远程访问服务端 4. 配置固定公网地址4.1 修改config文件 5. 固定tcp公网地址远程访问服务端 前言 今天我要给大家安利一个神器——CapsWrit…

Linux下安装SVN服务端小白教程

安装 使用yum安装非常简单&#xff1a; yum install subversion 配置 2.1. 创建仓库 我们这里在/home下建立一个名为svn的仓库&#xff08;repository&#xff09;&#xff0c;以后所有代码都放在这个下面&#xff0c;创建成功后在svn下面多了几个文件夹。 [rootlocalhos…

了解大语言模型的基本原理(三)——如何正确使用ChatGPT

想要正确使用Chat GPT&#xff0c;就需要提高和AI沟通的质量和效率&#xff0c;这就需要提示工程&#xff08;Prompt Engineering&#xff09;。 ChatGPT的缺陷&#xff1a;由于LLM是根据预测下一个最大概率token来生成文本的&#xff0c;所以ChatGPT对于没有学习过的知识或者…

【5】阿里面试题整理

[1]. 介绍一下ZooKeeper ZooKeeper是一个开源的分布式协调服务&#xff0c;核心功能是通过树形数据模型&#xff08;ZNode&#xff09;和Watch机制&#xff0c;解决分布式系统的一致性问题。 它使用ZAB协议保障数据一致性&#xff0c;典型场景包括分布式锁、配置管理和服务注…

uniapp使用路由名称跳转

由于web端和app公用一套菜单&#xff0c;而两个项目的路径是不同的&#xff0c;为解决这个问题&#xff0c;封装了一套使用路由名称作为跳转路由的方法 1.在pages.json文件里pages对应的页面配置里添加 routeName 字段&#xff08;自定义&#xff09;&#xff0c;我做的app里面…