C语言实现队列(Push Pop Size Front EmptyBack)

队列是一个重要的数据结构,他的特性是先进先出,所以由于这个特性,队列只有一个入口和一个出口,所以只有push和pop

下面我们看一下他如何实现

首先我们来看一下他的结构体

01158512ca5340408a2024f5c3f4d8f3.png

这里我们看到我们定义了两个结构体,其中一个是队列的节点,另外一个是队列,这里是这样的,我们的队列是用链表来实现的,(这里用链表实现相对简单一点 )所以就用链表实现,但是这里我们肯定是要有一个记录头和尾的节点的,所以我们又定义了一个队列的结构体,这个结构体里面有两个节点,分别是头和尾。下面我们来看一下这个的包含关系,更容易理解一点

cbc304dcf055415db13c5f1211a959c8.png

 就是这个样子的,结构体queue里面包含两个queuenode类型的指针,来记录头和尾(因为后面有需要)

下面我们就浅浅的看一下需要实现哪些函数(基本)

acca19795b69426aa2b7b72b271d47a1.png

 就是这些了,下面我们就一个一个的看一下

首先来看一下初始化

05cf5f160fe94104a25a62eeaac03fce.png

初始化函数比较简单,就是一个queue里面的两个节点都置为空,然后把size置为0就可以了。

下面看一下Push

333faca8514f4e828b9a99e0f70bbf8a.png 

还就是之前的断言这里不讲了,还有就是malloc函数,由于是链表实现,所以我们需要一个节点就malloc一个 

下面说一下队列的插入是怎么样的,队列是只有一个口插入一个口出数据,所以队列是先入先出的

下面来一张图片

33ddef7c15854ae2a3d6f2579f508f40.png

就是这个样子的,所以我们让他一直头插,所以我们就直接头尾插就好了,其实也就是链表的头插,所以就需要一个tail指针了

下面说一下

234f2f702c8b4421bf1e5ca372f7bd1a.png 

根据我们上面说的,Pop就是头删了,所以就是头删就可以,当然由于Push的时候是要么Head和Tail都为空,要么就都不是空,所以这里当Head的下一个为空的时候(就是只剩下一个节点的时候),删除之后就要把head和tail都置为空,剩下的就和正常是一样的了

下面看一下size,他真的是...so easy不过还是看一下吧

7fd5cedcb04e484a94bf7a9957859b66.png

其实我并不太想说什么,就是直接返回里面的size就可以了

 下面还是看一下取头节点的数据

b48055582a644e55af96d7c206be7583.png

其实也并不难,直接返回头节点的数据

下面就是尾节点的数据

8276019ff9a94225845bc996bc3a8b10.png 

也就是返回尾节点数据

 下面在看一下是否为空,空的话返回true,非空返回false

30606bab4885471ebbcb50ba26f55251.png

就是如果size为空就返回true了....反之则false

最后一个就是destroy了

我们来看一下

268a5740d9c84cdeabd56b3314b4c617.png 

就是和链表删除也是差不多的,定义一个节点然后就是挨个删除

结束

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/1807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于多层板,你了解多少?

01 前言 大家好,我是张巧龙。好久没写原创了,记得之前刚接触PCB时,还在用腐蚀单层板,类似这种。 慢慢随着电子产品功能越来越多,产品越来越薄,对PCB设计要求越来越高了,复杂程度也随之增加。因此…

第十四届蓝桥杯三月真题刷题训练——第 17 天

目录 第 1 题:ASC 运行限制 代码: 第 2 题:递增三元组_双指针_long 输出描述 输入输出样例 运行限制 代码: 第 3 题:环境治理 代码: 第 4 题:小球称重 代码: 第 1 题&a…

小白学Pytorch系列--Torch API (7)

小白学Pytorch系列–Torch API (7) Comparison Ops allclose 此函数检查输入和其他是否满足条件: >>> torch.allclose(torch.tensor([10000., 1e-07]), torch.tensor([10000.1, 1e-08])) False >>> torch.allclose(torch.tensor([10000., 1e-…

48天强训 Day1 JavaOj

48天强训 & Day1 & JavaOj 1. 编程题1 - 组队竞赛 组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 1.1 读题 1.2 算法思想基础 我们应该尽量的让每一个队伍的中间值都最大化~我们应该尽量的让每一个队伍的最小值都足够小~前33%的不应该都作为每个队伍的最大值~ 接下来…

LeetCode算法 不同路径 和 不同路径II C++

目录题目 不同路径参考答案题目 不同路径II参考答案题目 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finis…

Git 入门最佳实践

Git 入门最佳实践 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学习和工作都离不开发工具,今天和大家分享 Git 常用命令总结。 Git简介 Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优…

【Java】UDP网络编程

文章目录前言DatagramSocketDatagramPacket注意事项与区别代码演示前言 UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。 UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对…

html+css 实现 熊猫样式

效果 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible"…

ThinkPHP01:数据库和模型

ThinkPHP01&#xff1a;数据库和模型一、开启调试模式二、配置文件三、URL解析四、数据库五、模型1. 定义模型2. 使用模型① 查询记录② 新增记录③ 删除记录④ 更新记录3. 字段设置4. 模型获取器5. 模型修改器6. 模型查询范围7. 模型数据集8. 模型的自动时间戳9. 模型的只读字…

为什么VMware会给我多创建了两个网络呢?Windows和Linux为什么可以彼此ping的通呢

为什么VMware会给我多创建了两个网络呢&#xff1f;Windows和Linux为什么可以彼此ping的通呢 文章目录为什么VMware会给我多创建了两个网络呢&#xff1f;Windows和Linux为什么可以彼此ping的通呢桥接模式ANT模式&#xff08;VMnet8&#xff09;仅主机模式&#xff08;VMnet1&a…

学习系统编程No.6【进程控制】

引言&#xff1a; 北京时间&#xff1a;2023/3/19/15:16&#xff0c;刚刚睡醒&#xff0c;我发现我真的能睡&#xff0c;早上将反向迭代器剩下的一些知识学完&#xff0c;发现&#xff0c;昨天那篇博客发的有些匆忙了&#xff0c;最后有关反向迭代器的知识都没有把精华部分给分…

使用旧电脑玩Linux

今天给大家讲讲使用旧电脑玩Linux&#xff0c;大家应该都知道旧电脑的硬件一般比较落后&#xff0c;特别是一些非常老的电脑&#xff0c;目前还在使用的是机械硬盘&#xff0c;如是要跑windows可想而知&#xff0c;但是Linux系统对硬件性能的要求可比windows低的多了&#xff0…

常用React Hooks大合集(二)

React Hooks useRef useRef返回一个ref对象&#xff0c;返回的ref对象再组件的整个生命周期保持不变。 最常用的ref是两种用法&#xff1a; 用法一&#xff1a;引入DOM&#xff08;或者组件&#xff0c;但是需要是class组件&#xff09;元素&#xff1b;用法二&#xff1a;保…

C#中的DataGridView中添加按钮并操作数据

背景&#xff1a;最近在项目中有需求需要在DataGridView中添加“删除”、“修改”按钮&#xff0c;用来对数据的操作以及显示。 在DataGridView中显示需要的按钮 首先在DataGridView中添加需要的列&#xff0c;此列是用来存放按钮的。 然后在代码中“画”按钮。 if (e.Column…

JVM监控搭建

文章目录JVM监控搭建整体架构JolokiaTelegrafInfluxdbGrafanaJVM监控搭建 整体架构 JVM 的各种内存信息&#xff0c;会通过 JMX 接口进行暴露。 Jolokia 组件负责把 JMX 信息翻译成容易读取的 HTTP 请求。Telegraf 组件作为一个通用的监控 agent&#xff0c;和 JVM 进程部署在…

ChatGPT推出第四代GPT-4!不仅能聊天,还可以图片创作!

3月15日凌晨&#xff0c;OpenAI震撼发布了多模态预训练大模型 GPT-4。 根据官网发布的通告可以知道&#xff0c;GPT-4 实现了以下几个方面的飞跃式提升&#xff1a;强大的AI创作识图能力&#xff1b;文字输入限制提升至 2.5 万字&#xff1b;回答准确性显著提高&#xff1b;能够…

【基础算法】数组相关题目

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招算法的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于代码随想录进行的&#xff0c;每个算法代码参考leetcode高赞回答和…

DJ2-4 进程同步(第一节课)

目录 2.4.1 进程同步的基本概念 1. 两种形式的制约关系 2. 临界资源&#xff08;critical resource&#xff09; 3. 生产者-消费者问题 4. 临界区&#xff08;critical section&#xff09; 5. 同步机制应遵循的规则 2.4.2 硬件同步机制 1. 关中断 2. Test-and-Set …

人工智能前沿知识

本来想着初试完学习一下李沐大神的《动手学深度学习》这本书的&#xff0c;但是时间仓促&#xff0c;完全来不及。只能先自行了解一些知识&#xff0c;之后再深入了解。 这里为面试应答&#xff0c;问了chatgpt一些关于AI前沿的知识&#xff1a; 还需要再了解一番&#xff1a;…

网站经常被DDOS攻击的原因有哪些

过去这几年&#xff0c;互联网创业热潮非常火&#xff0c;几乎所有行业都向互联网转型。很多互联网公司都会经历被 DDoS 攻击&#xff0c;导致网站服务瘫痪&#xff0c;用户流失以及公司信用度的负面影响。什么是 DDOS 攻击呢&#xff1f;DDOS 攻击是通过控制大量僵尸网络向服务…
最新文章