栈和队列:队列

目录

队列概念:

队列:

先进先出:

与栈的区别:

队列的实现:

关于节点指针的封装:

初始化: 

入队: 

出队: 

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

判断队列是否存在: 

获取队列长度:

销毁队列:

主函数部分: 


队列概念:

队列:

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

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

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

先进先出:

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

与栈的区别:

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

队列的实现:

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

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

关于节点指针的封装

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

初始化: 

入队: 

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

出队: 

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

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

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

判断队列是否存在: 

获取队列长度:

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

销毁队列:

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

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

主函数部分: 


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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 组件进阶

目标:1.能够使用props接收数据 2.能够实现父子组建之间的通讯 3.能够实现兄弟组建之间的通讯 4.能够给组建添加props校验 5.能够说出生命周期常用的钩子函数 6.能够知道高阶组件的作用 一,组件通讯介绍 组件是独立且封闭的单元,默认情况下&a…

官网下载tomcat

1、Tomcat官网地址: https://tomcat.apache.org/ 2、下载以及安装步骤

HALSTM32通用定时器+EXTI实现单击/双击/长按功能

HALSTM32通用定时器EXTI实现单击/双击/长按功能 ✨在使用USB功率计的时候,发现上面的一个按键实现多画面功能切换,于是探索了一下是如何实现的,将其实现的基本思路以及综合网上收集的相关实现方法,粗陋的整理了一下,将…

windows安装gdal库

提示:在windows上使用pip在cmd终端安装gdal 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 原因是由于丹丹安装使用pip安装gdal时报错Microsoft visual C 1…

从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器

WEB服务器 1. HTTP协议1.1 HTTP-概述1.1.1 介绍1.2.2 特点 2.2 HTTP-请求协议2.3 HTTP-响应协议2.3.1 格式介绍2.3.2 响应状态码 2.4 HTTP-协议解析 2. WEB服务器-Tomcat2.1 简介2.1.1 服务器概述2.1.2 Web服务器2.1.3 Tomcat 2.2 基本使用2.2.1 下载2.2.2 安装与卸载2.2.3 启动…

C++: 模板初阶

一. 泛型编程 如何实现一个通用的交换函数呢? 参数是不同类型的数据. void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(cha…

Vue3-组合式API生命周期函数

一进入页面的请求一律放在setup中执行 如果有些代码需要在mounted生命周期中执行&#xff0c;并且写成函数的调用方式可以调用多次&#xff0c;并不会冲突&#xff0c;而是按照顺序依次执行 <script setup>onMounted(()>{console.log("mounted生命周期函数-逻辑…

<C++> stack queue模拟实现

目录 前言 一、stack的使用 1. 接口说明 2. 例题 二、模拟实现stack 三、queue的使用 四、模拟实现queue 五、deque 总结 前言 LIFO stack 1. 栈是一种容器适配器&#xff0c;专门设计用于在后进先出上下文&#xff08;后进先出&#xff09;中运行&#xff0c;其中元素仅从容器…

Shopee个人能入驻开店吗?Shopee一个站点可以开几个店铺?

Shopee允许每个用户在同一个站点上开设多个店铺&#xff0c;这为商家提供了更多的经营灵活性和选择。同时&#xff0c;Shopee也鼓励个人用户入驻开店&#xff0c;提供便捷的入驻方式和丰富的支持工具。下面来看看具体介绍。 shopee个人能入驻开店吗 与许多电子商务平台相比&a…

基于vue 2.0的H5页面中使用H5自带的定位,高德地图定位,搜索周边商户,覆盖物标记,定位到当前城市

基于vue的H5页面中使用高德地图定位&#xff0c;搜索周边商户&#xff0c;覆盖物标记 首先安装高德地图插件 npm i amap/amap-jsapi-loader --save地图承载容器 <template><div id"container"></div> </template>地图容器样式 <style…

uniapp——项目day05

购物车页面 结算区域 把结算区域封装为组件 1. 在 components 目录中&#xff0c;新建 my-settle 结算组件&#xff1a; 2. 初始化 my-settle 组件的基本结构和样式&#xff1a; <template><view class"my-settle-container">结算组件</view> …

通讯协议学习之路(实践部分):UART开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…