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

栈和队列:队列

目录

队列概念:

队列:

先进先出:

与栈的区别:

队列的实现:

关于节点指针的封装:

初始化: 

入队: 

出队: 

 获取队头元素和获取队尾元素:

判断队列是否存在: 

获取队列长度:

销毁队列:

主函数部分: 


队列概念:

队列:

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。

特点:队列具有先进先出 FIFO(First In First Out)

  • 入队列:进行插入操作的一端称为队尾
  • 出队列:进行删除操作的一端称为队头

先进先出:

队列顾名思义,和排队有着相似的情况,也就是在队伍前排的人能够先享受到服务,也就是先离开队伍。

与栈的区别:

  • 队列与栈的最大区别除了先进先出和后进先出的不同外,还有一对一和一对多的不同。
  • 在栈中,入栈和出栈的关系是一对多,入栈的同时可以出栈,且可以连续出栈,而队列的入队出队只能是一对一,一边入队一边出队。 

队列的实现:

相比于栈使用顺序表实现,而对于队列而言使用单链表实现队列无疑是最好的选择。 

单链表:链表——单链表的简单介绍-CSDN博客 

关于节点指针的封装

  • 因为需要一个头节点和一个尾节点分别作为队头和队尾,且都需要传二级指针
  • 所以为了方便,我们直接搞一个结构体把二者存进去,然后调用结构体即可,且调用的还是一级指针
  • 同时我们还需要计算队列的长度,于是在结构体中,我们也加入了长度的成员变量。
  • 当然,如果不想要封装也可以,但是因为我们队列的核心是头删和尾插,如果单纯的按照单链表的进行,那么只需要一个头节点指针的话,之后的获取队尾元素和计算长度,以及尾插操作都需要进行遍历,非常的麻烦。
  • 因此,我们这里设计一个尾指针,就和一些OJ题的创造一个新的链表操作一样,方便找尾。

初始化: 

入队: 

这里就和单链表一样,创造一个新的节点,对新节点进行赋值,然后改变尾节点指针指向,以及修改新节点的后继指针(next)指向,就相当于单链表尾插

出队: 

相当于单链表头删,将头节点指针指向改变称为后面一个节点,同时我们还需要注意头删的时候需要进行判断,如果队列是空的头删没有意义。

同时后面的if语句是表明当队列只有一个节点时,头删到最后就变成了空的队列,空的链表。

 获取队头元素和获取队尾元素:

判断队列是否存在: 

获取队列长度:

在此之前封装头节点指针和尾节点指针,以及队列长度的结构体起到了关键性作用! 

销毁队列:

和单链表一样,使用临时变量进行存储头节点,随后进行遍历删除和释放空间 

且和栈一样,都会导致最后队列为空 

主函数部分: 


相关文章:

  • 如何显示标注的纯黑mask图
  • 第二章 智能家居子系统——C51单片机 配置波特率115200
  • Ribbon 负载均衡原理和策略
  • python解析wirshark抓包数据
  • electronjs入门-编辑器应用程序
  • 高并发架构设计(三大利器:缓存、限流和降级)
  • DAY02 c++对c的扩展
  • 二维码在区域巡查中的应用:隐患上报、巡逻巡更、管线巡查
  • 数据结构--图解单链表
  • 响应系统的作用与实现
  • 攻防世界-web-unseping
  • 如何设计短域名系统
  • V-for中 key 值的作用,如何选择key
  • 《洛谷深入浅出进阶篇》P3397 地毯————二维差分
  • 部署百川大语言模型Baichuan2
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [译] React v16.8: 含有Hooks的版本
  • 「面试题」如何实现一个圣杯布局?
  • C++类中的特殊成员函数
  • canvas绘制圆角头像
  • Java,console输出实时的转向GUI textbox
  • JavaScript 奇技淫巧
  • Laravel 菜鸟晋级之路
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Ruby 2.x 源代码分析:扩展 概述
  • Spring Cloud中负载均衡器概览
  • Travix是如何部署应用程序到Kubernetes上的
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信公众号开发小记——5.python微信红包
  • 【云吞铺子】性能抖动剖析(二)
  • 第二十章:异步和文件I/O.(二十三)
  • ​linux启动进程的方式
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #《AI中文版》V3 第 1 章 概述
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)(2.10) LTM telemetry
  • (30)数组元素和与数字和的绝对差
  • (js)循环条件满足时终止循环
  • (libusb) usb口自动刷新
  • (二)windows配置JDK环境
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (九)c52学习之旅-定时器
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)LINQ之路
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)程序员技术练级攻略
  • .axf 转化 .bin文件 的方法
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net Web项目创建比较不错的参考文章
  • .NET 中的轻量级线程安全
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net图片验证码生成、点击刷新及验证输入是否正确