【数据结构】什么是队列?

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022


目录

📌队列的定义

📌队列的抽象数据类型

📌队列的顺序存储结构

📌队列的链式存储结构

结语


人生,是一个又一个小小的队列重现.春夏秋冬轮回年年,早中晚夜循环天天.变化的是时间,不变的是你对未来执着的信念.                           ——封清扬


📌队列的定义

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.

队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端称为队头.

队列在程序设计中用的非常频繁,比如用键盘在屏幕上进行各种字母或数字的输入.

我们都知道,键盘输入的内容是先存到键盘缓冲区然后再从键盘缓冲区输出到屏幕上,而键盘缓冲区存储数据的方式就是队列,假如我想告诉女朋友你是我的"god",那么用队列存储数据的话按先进先出原则,内容输出到屏幕上也应该是"god":


但是如果键盘缓冲区是使用栈来存储数据的,那就不得了了,按照先进后出的原则,我输入了"god",屏幕上却显示"dog",那估计晚上搓衣板和榴莲是少不了要跪一个了.


📌队列的抽象数据类型

同样是线性表,队列也有类似线性表的各种操作,不同之处在于插入数据只能在队尾进行,删除数据只能在队头进行.

队列抽象数据类型如下:

ADT 队列(Queue)
Data队列的数据对象集合为 {a1, a2, ..., an},每个元素的类型均为QDataType.其中, 除第一个元素a1外, 每一个元素有且只有一个直接前驱元素.除了最后一个元素an外, 每一个元素有且只有一个直接后继元素.数据元素之间的关系是一对一的关系.
OperationInitQueue(*Q);			初始化操作, 建立一个空的队列Q.DestroyQueue(*Q)        若队列Q存在,则销毁它.QueueEmpty(Q);			若队列Q为空,返回true,否则返回false.ClearQueue(*Q);			将队列Q清空.GetHead(Q, *e);		    若队列Q存在且非空,用e返回Q的队头元素.EnQueue(*Q,e);          若队列Q存在,插入新元素e到队列Q中并成为队尾元素.DeQueue(*Q,*e);         删除队列Q中队头元素,并用e返回其值.QueueLength(Q);			返回队列Q的元素个数.
endADT

📌队列的顺序存储结构

顺序队列顺序表一样,都是使用数组来实现的,对于队列这种只能一头插入,另一端删除的线性表来说,使用数组必然会导致入队和出队中有一个时间复杂度是O(1),另一个是O(n).

 

顺序队列中,入队和出队的逻辑完全和顺序表的尾插,尾删,头插,头删逻辑一样,但区别在于,选择数组下标为0作队头,那入队就是尾插,出队就是头删.

其操作逻辑和顺序表完全相同,这里就不多赘述了.


📌队列的链式存储结构

队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出,简称链队列.

为了操作方便,我们将队头指针指向链队列的首节点,将队尾指针指向尾结点:

空队列时,front和rear都指向NULL.

链队列的入队操作和单链表尾插逻辑相同,但在尾插结束后需要移动队尾指针指向新队尾.

链队列的出队操作和单链表头删逻辑相同,但在头删后同样需要移动队头指针指向新队头


结语

当我们了解了队列的定义后,接下来我们将一起实现一个链队列程序,由于篇幅有限,我会在下篇博客中为大家详细介绍一下链队列的实现,感兴趣的话可以点击下面链接查看:

【数据结构】用C语言实现链队列(附完整运行代码)icon-default.png?t=N7T8https://blog.csdn.net/weixin_72357342/article/details/134618998

希望这篇有关数据结构队列的介绍文章能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【数据结构】什么是线性表?

【数据结构】线性表的链式存储结构

【数据结构】C语言实现顺序表万字详解(附完整运行代码)

【数据结构】C语言实现单链表万字详解(附完整运行代码)

【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)

【数据结构】什么是栈?

【数据结构】用C语言实现顺序栈(附完整运行代码)



数据结构栈与队列篇思维导图:

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

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

相关文章

论文笔记——FasterNet

为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。 为了实现更快的网络,作者重新回顾了FLOPs的运算符,并证明了如此低的FLOPS主要是由…

用户与组管理:如何在服务器系统中管理用户和权限

你是否想过,当你登录到一个服务器系统时,你是如何被识别和授权的?你是否知道,你可以通过创建和管理用户和组来简化和优化你的系统管理工作?你是否想了解一些常用的用户和组管理命令和技巧?如果你的答案是肯…

基于OGG实现Oracle实时同步MySQL

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成:pytestrequestsallure 设计模式: 关键字驱动 项目结构: 工具层:api_keyword/ 参数层:params/ 用例层:case/ 数据驱动:data_driver/ 数据层:data/ 逻…

上新!2023年汉字小达人市级比赛在线模拟题增加2个刷题试卷

各位小学三年级到五年级的上海学霸孩子们,刚刚结束了上海小学生古诗文大会的复赛,就紧锣密鼓地全身心投入到上海小学生汉字小达人的市级比赛的备赛中了。 为了助各位孩子一臂之力,我把在线模拟题进行了更新,新增了两个可以刷题的试…

LeetCode Hot100 105.从前序与中序遍历序列构造二叉树

题目&#xff1a;给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 代码&#xff1a; class Solution {private Map<Integer, Integer> indexM…

burp suite 2023.10 Intruder模块详解)

burp suite 2023 Intruder模块详解 Intruder 模块是Burp suite的一个重要功能&#xff0c;用于自动化攻击和对目标应用程序进行大规模的攻击测试。 其主要功能包括&#xff1a; Payloads 设置&#xff1a; 用户可以定义不同类型的 payload&#xff0c;例如字典、数字范围、定…

spring本地事务与单/多线程

请直接看原文 原文链接:多线程与数据库事务以及数据库连接之间的关系 - 知乎 (zhihu.com) -------------------------------------------------------------------------------------------------------------------------------- 今天我们来梳理一下&#xff0c; 多线程、数…

Selenium+Pytest自动化测试框架实战

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

java集合,ArrayList、LinkedList和Vector,多线程场景下如何使用 ArrayList

文章目录 Java集合1.2 流程图关系1.3 底层实现1.4 集合与数组的区别1.4.1 元素类型1.4.2 元素个数 1.5 集合的好处1.6 List集合我们以ArrayList集合为例1.7 迭代器的常用方法1.8 ArrayList、LinkedList和Vector的区别1.8.1 说出ArrayList,Vector, LinkedList的存储性能和特性1.…

1、Mysql架构与历史

Mysql逻辑架构 最上层是服务并不是Mysql所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接处理&#xff0c;授权认证&#xff0c;安全等。 第二层是Mysql比较有意思的部分。大多数Mysql的核心服务都在这一层&#xff0c;…

2024北京理工大学计算机考研分析

24计算机考研|上岸指南 北京理工大学 计算机学院始建于1958年&#xff0c;是全国最早设立计算机专业的高校之一。2018年4月&#xff0c;计算机学院、软件学院、网络科学与技术研究院合并成立新的计算机学院。学院累计为国家培养各类人才15000余名。计算机科学学科ESI排名进入全…