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

队列的基本操作(C语言链表实现)初始化,入队,出队,销毁,读取数据

文章目录

  • 前言
  • 一、队列基本变量的了解
  • 二、队列的基本操作
    • 2.1队列的初始化(QueueInit)
    • 2.2入队(QueuePush)
    • 2.3判断是否为空队(QueueEmpty)
    • 2.4出队(QueuePop)
    • 2.5队列的队头数据(QueueFront)
    • 2.6队列的队尾数据(QueueBack)
    • 2.7队列大小(QueueSize)
    • 2.8队列的销毁(QueueDestroy)


前言


在这里插入图片描述

提示:以下是本篇文章正文内容,下面案例可供参考
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

一、队列基本变量的了解

在这里插入图片描述

typedef int QDataType;//队列数据类型typedef struct QueueNode {QDataType data;//数据域struct QueueNode* next;//指针域
}QNode;//先建立一个结点typedef struct Queue {QNode* head;//头QNode* tail;//尾int size;//队列数量
}Queue;//将头与尾还有数量封装在一起能更好操作

二、队列的基本操作

2.1队列的初始化(QueueInit)

void QueueInit(Queue* pq) {assert(pq);pq->head = pq->tail = NULL;//刚开始没有数据,所以头尾都为NULLpq->size = 0;//数量
}

2.2入队(QueuePush)

在这里插入图片描述

void QueuePush(Queue* pq,QDataType x) {assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL) {perror("malloc error");return;}//判断是否为有效空间newnode->data = x;newnode->next = NULL;//初始化新结点if (pq->head == NULL) {assert(!pq->tail);pq->head = pq->tail = newnode;//之所以要分开判断是因为//我们也要保证只有一个数据时//head与tail指向同一个//如果只有else虽然也能够正常插入//但是tail一直指向NULL}else {pq->tail->next = newnode;//在尾巴后面接上也就是入队pq->tail = pq->tail->next;//尾巴改变,指向新加入的数据}pq->size++;//数据+1
}

2.3判断是否为空队(QueueEmpty)

bool QueueEmpty(Queue* pq) {assert(pq);return pq->size==0;//数量为0返回为真,真为空,假为不空
}

2.4出队(QueuePop)

在这里插入图片描述

void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));if (pq->head->next == NULL) {free(pq->head);//只有一个元素//直接将尾巴与头置空pq->head = pq->tail = NULL;}else {QNode* Next = pq->head->next;//记录队头下一个结点free(pq->head);//释放队头pq->head = Next;//队头指向下一个位置}pq->size--;//数量减少
}

2.5队列的队头数据(QueueFront)

QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq->head->data;//直接去队头数据
}

2.6队列的队尾数据(QueueBack)

QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq->tail->data;
}

2.7队列大小(QueueSize)

int QueueSize(Queue* pq) {assert(pq);return pq->size;
}

2.8队列的销毁(QueueDestroy)


void QueueDestroy(Queue* pq) {assert(pq);QNode* cur = pq->head;//记录当前结点while (cur) {QNode* Next = cur->next;//当前结点的下一个结点free(cur);//释放当前节点cur = Next;//让当前结点指向下一个结点}pq->head = pq->tail = NULL;//最后头尾都NULLpq->size = 0;
}

相关文章:

队列的基本操作(C语言链表实现)初始化,入队,出队,销毁,读取数据

文章目录 前言一、队列基本变量的了解二、队列的基本操作2.1队列的初始化(QueueInit)2.2入队(QueuePush)2.3判断是否为空队(QueueEmpty)2.4出队(QueuePop)2.5队列的队头数据&#xf…...

项目支付接入支付宝【沙箱环境】

前言 订单支付接入支付宝,使用支付宝提供的沙箱机制模拟为订单付款。我这里主要记录一下沙箱环境如何接入到系统中,具体细节的实现。按照官方文档来就可以了。 1、使用步骤 这里有几个重要数据要拿到,一个是支付宝的公钥和私钥&#xff0c…...

程序员应该如何提升自己

作为一名程序员,以下是您可以考虑的一些方法来提高自己的技能和知识: 深入学习编程语言和相关工具:了解您使用的编程语言和相关工具的基本原理和高级特性,以便更好地理解其工作方式并更有效地使用它们。 刻意练习:刻意…...

全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成

ABB是数字行业的技术前沿者,拥有四项主营业务:电气化,工业自动化,运动控制以及机器人和离散自动化。ABB总部位于瑞士苏黎世,业务遍及100多个国家,拥有约105,000名员工。2021年,该公司…...

手写简易 Spring(三)

文章目录 三. 手写简易 Spring(三)1. Bean 对象初始化和销毁方法1. XML 添加 init-method 与实现 InitializingBean 接口注册初始化2. XML 添加 destroy-method 与实现 DisposableBean 接口注册销毁3. DefaultSingletonBeanRegistry 优秀的解耦方法 2. 定…...

设计模式-看懂UML类图和时序图

这里不会将UML的各种元素都提到,只讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,应该能将类图所表达的含义和最终的代码对应起来; 1…...

2023年全国最新安全员精选真题及答案57

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 101.(单选题)遇有()及以上强风、浓雾等…...

数字图像处理基础

图像增强:不论方法,只要能够得到较好的图像即可 图像复原:找到图像退化的原因,把噪声过滤得到较好的图像 RGB——HSI(色调 饱和度 亮度)彩色图像处理需要用到灰度图像处理 直方图均衡,灰度概率密度函数接近均匀分布&a…...

onnx手动操作

使用onnx.helper可以进行onnx的制造组装操作: 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…...

虚拟机安装Centos7,ping不通百度

虚拟机安装Centos7,ping不通百度 一、虚拟机网络配置 网络适配器选择桥接模式,不勾选复制物理网络连接状态。 同时虚拟机使用默认配置都是桥接。 二、配置静态IP 1、首先,查看宿主机的IP和网关 2、配置静态ip的文件地址及修改命令如下&…...

leetCode算法第一天

今天开始刷算法题,提升自己的算法思维和代码能力,加油! 文章目录 无重复字符的最长子串最长回文子串N形变换字符串转换整数 无重复字符的最长子串 leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characte…...

怎么将太大的word文档压缩变小,3个高效方法

怎么将太大的word文档压缩变小?word文档是我们在办公中使用较多的文件格式之一,相信小伙伴们会遇到这样的问题,编辑完成word文档之后发现,编辑完的文档体积太大了,无论是发送给客户还是上传到邮箱中都不方便&#xff0…...

mvc+动态代理

不使用MVC的时候系统存在的缺陷 一个Servlet都负责了那些工作? 负责了接收数据负责了核心的业务处理负责了数据表中的CRUD负责了页面的数据展示… 分析银行转账项目存在那些问题? 代码的复用性太差。(代码的重用性太差) 因为没…...

vue-cli(vue脚手架方式搭建)

1.首先安装node前端环境,可以帮助我们去下载其他的组件 下载完成后,去自己的电脑找到node的文件路径,复制去配置环境变量,在path中配 环境搭配完成后,在cmd中进行测试 ,输入一下两个命令进行测试 2.在hbuilderX中创建一个vue-cli项目(标准的前段项目) 3.组件路由 (1)安装 v…...

CentOS 安装 Docker

文章目录 一、更新yum源二、查看docker是否曾经安装过三、安装所需要的软件包四、设置yum源(也可以设置成国内的阿里源等)五、查看docker版本六、.安装docker (默认全部选y)七、查看docker安装版本八、docker 启动/停止/重启/开机…...

别搞了 软件测试真卷不动了...

内卷可以说是 2022年最火的一个词了。2023 年刚开始,在很多网站看到很多 软件测试的 2022 年度总结都是:软件测试 越来越卷了(手动狗头),2022 年是被卷的一年。前有几百万毕业生虎视眈眈,后有在职人员带头“…...

OJ刷题 第十二篇

21308 - 特殊的三角形 时间限制 : 1 秒 内存限制 : 128 MB 有这样一种特殊的N阶的三角形&#xff0c;当N等于3和4时&#xff0c;矩阵如下&#xff1a; 请输出当为N时的三角形。 输入 输入有多组数据&#xff0c;每行输入一个正整数N&#xff0c;1<N<100 输出 按照给出…...

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…...

MySQL数据库,联合查询

目录 1. 联合查询 1.1 内查询 1.2 外查询 1.3 自连接 1.4 子查询 1.5 合并查询 1. 联合查询 联合查询&#xff0c;简单的来讲就是多个表联合起来进行查询。这样的查询在我们实际的开发中会用到很多&#xff0c;因此会用笛卡尔积的概念。 啥是笛卡尔积&#xff1f;两张表…...

springboot注解(全)

一、什么是Spring Boot Spring Boot是一个快速开发框架&#xff0c;快速的将一些常用的第三方依赖整合&#xff08;通过Maven子父亲工程的方式&#xff09;&#xff0c;简化xml配置&#xff0c;全部采用注解形式&#xff0c;内置Http服务器&#xff08;Jetty和Tomcat&#xff0…...

开源AI应用开发平台TaskingAI:从RAG智能体到工作流编排实战

1. 项目概述&#xff1a;一个开源的AI应用开发平台最近在折腾AI应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;想法很丰满&#xff0c;落地很骨感。你想做个智能客服、一个文档分析助手&#xff0c;或者一个个性化的内容生成工具&#xff0c;从模型调用、流程…...

DeepMind Lab:强化学习研究的3D视觉仿真平台搭建与实战指南

1. 项目概述&#xff1a;一个被低估的强化学习研究“健身房”如果你在深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;这个圈子里待过一段时间&#xff0c;或者正试图入门&#xff0c;那么你大概率听说过OpenAI的Gym、Unity的ML-Agents&#xff0c;甚至…...

自建轻量级Docker镜像中心:聚合管理与加速部署实践

1. 项目概述&#xff1a;一个面向容器化开发者的中心化镜像仓库最近在和一些做容器化开发的朋友交流时&#xff0c;大家普遍提到一个痛点&#xff1a;随着团队项目增多&#xff0c;Docker镜像的管理变得越来越零散。有的镜像放在Docker Hub&#xff0c;有的放在阿里云镜像服务&…...

Proof Engine:简化零知识证明开发,降低区块链应用门槛

1. 项目概述&#xff1a;Proof Engine&#xff0c;一个为现代开发者设计的证明引擎如果你和我一样&#xff0c;在构建需要复杂逻辑验证、状态证明或零知识证明&#xff08;ZKP&#xff09;相关应用时&#xff0c;常常感到头疼——工具链复杂、学习曲线陡峭、不同框架间的兼容性…...

DIY智能电机推子:从闭环控制到MIDI交互的硬件实战

1. 项目概述与核心价值如果你玩过专业的音频混音台&#xff0c;或者在一些高端的灯光控制台上见过那种会自己“嗖”一下滑到指定位置的推子&#xff0c;那你一定对电机推子&#xff08;Motorized Fader&#xff09;不陌生。这东西的魅力在于&#xff0c;它既是精准的模拟输入设…...

Shinkai Node:构建自主AI Agent的去中心化操作系统内核

1. 项目概述&#xff1a;Shinkai Node 是什么&#xff0c;以及它为何值得关注最近在跟一些做AI应用开发的朋友聊天&#xff0c;发现大家普遍面临一个痛点&#xff1a;如何让AI Agent&#xff08;智能体&#xff09;真正“活”起来&#xff0c;拥有持续的记忆、自主的行动能力&a…...

如何快速掌握G-Helper:华硕笔记本轻量级控制工具完全指南

如何快速掌握G-Helper&#xff1a;华硕笔记本轻量级控制工具完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…...

ROFL-Player:终极免费英雄联盟回放播放器解决方案

ROFL-Player&#xff1a;终极免费英雄联盟回放播放器解决方案 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player ROFL-Player是一款专门为《…...

卷积神经网络在图像分类中的历史(1989 年至今)

原文&#xff1a;towardsdatascience.com/the-history-of-convolutional-neural-networks-for-image-classification-1989-today-5ea8a5c5fe20?sourcecollection_archive---------5-----------------------#2024-06-28 深度学习和计算机视觉领域最伟大创新的视觉之旅。 https…...

告别手写代码:用达芬奇Configurator+DBC文件,5分钟搞定AUTOSAR CAN控制器配置

达芬奇ConfiguratorDBC文件&#xff1a;5分钟完成AUTOSAR CAN控制器高效配置指南 在汽车电子开发领域&#xff0c;AUTOSAR架构的普及使得嵌入式软件开发流程日益标准化&#xff0c;但随之而来的配置复杂度也让许多工程师头疼。特别是在CAN通信配置环节&#xff0c;传统的手动逐…...