线性数据结构之队列(Queue)
一.队列(Queue)
队列是一种用来存储数据的数据结构 , 与链表和栈类似 , 数据到达的次序是队列的关键 , 类似于生活中我们在排队购买东西时 , 第一个人是队首 , 最后一个人是队尾 , 第一个人先买到东西后离开 , 这个时候第二个人便成了队首 , 以此类推…
队列中第一个插入的元素也是第一个被删除的元素 , 所以队列是一种先进先出(First In First Out 简称 FIFO)或者后进后出(Last In Last Out 简称 LILO)的线性表
队列是一种只能在一端(队尾)插入 , 另一端(队首)删除的有序线性表 , 在队列中插入一个元素被称为入队(EnQueqe) , 在队列删除一个元素被称为出队(DeQueuq) , 试图对一个空队列执行出栈操作 , 被称为下溢(underflow) , 试图对一个满队列执行入队操作 , 被称为溢出(overflow)
1.队列的实现方式
基于简单循环数组实现
基于动态循环数组实现
基于链表的方式实现
1.1 基于简单循环数组实现
通常将尾指针rear指向当前队尾元素的真正位置 , 而头指针front指向当前队头元素的前一个位置(不让队头指针 , 队尾指针指向真正的元素是为了运算的时候方便 , 并不是唯一的方法) , 刚开始时 , 队列的头 , 尾指针都为-1 , 后面在出队或者入队时 , 头指针和尾指针值递增变化 , 如上图所示
如果队列为空的时候进行出队操作 , 那么此时将产生下溢现象 , 相反 , 如果队列满时做入队操作将会出现上溢现象
出栈和出队并不是真正的删除元素 , 只是不起作用
时间复杂度
入栈操作EnQueue时间复杂度为O(1)
出栈操作DeQueue时间复杂度为O(1)
局限性
用于实现队列的数组的最大空间必须预先声明且不能改变。试图对一个满队列执行入队操作会产生一个针对简单数组这种特定实现队列方式的异常。
1.2 基于动态循环数组实现
基于动态循环数组实现就是在每次队满的时候进行动态的扩容即可 , 原理同栈一样
栈数据结构飞机票 : 线性数据结构之栈(Stack)
时间复杂度
入队操作EnQueue时间复杂度考虑扩容的情况下为O(N) , 否则为O(1)
出队操作DeQueue时间复杂度为O(1)
1.3 基于链表的实现方式
实现队列的另一种方法是使用链表。通过在链表末端插入元素的方法实现入队(EnQueue)操作。通过删除链表表头元素的方法实现出队操作(DeQueue)。
时间复杂度
入队操作EnQueue时间复杂度平均为O(1)
出队操作DeQueue时间复杂度为O(1)
线性数据结构之队列(Queue)相关推荐
- 数据结构之队列queue
C++数据结构之队列queue 什么是队列 队列的基本特征 队列是如何工作的 队列的实现 队列的应用 什么是队列 与栈相反,队列是一种先进先出(FIFO)的线性表,只允许在表的一端插入,在另一端删除. ...
- 数据结构:队列queue的实现及功能
数据结构:队列quene的实现及功能 队列是数据结构的一种,数据存储方式为先进先出. 什么是队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rea ...
- java数据结构——6队列(Queue)
六.队列(Queue) 在"队列"(Queue)这种数据结构中,数据项是先进先出(FIFO:first in first out).队列的容量可以有限,也可以是无限的. 1.基于数 ...
- Python数据结构实战——队列(Queue)
文章目录 1.队列的性质(先进先出) 2.使用deque作为队列 3.使用双端队列实现Queue类 1.队列的性质(先进先出) wmt_stock_price_queue = [] wmt_stock ...
- C++ 数据结构之队列queue (henu.hjy)
队列是一端进一端出的限制性数据结构,本代码注重于健壮性,对于程序安全的处理稳定,同样队列也可以用一种顺序队列表示或用一种链队列表示,本代码使用的是链队列,就要 注意每个元素的后继,一下是队列的实现以及 ...
- 数据结构:线性数据结构(1)-栈(栈,队列,deques, 列表)
栈,队列,deques, 列表是一类容器,他们数据项之间的顺序由添加或删除的顺序决定,一旦一个数据项被添加,它相对于前后元素一直保持该位置不变.注入此类的数据结构称为线性数据结构. 栈 栈(栈,队列, ...
- python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...
python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...
- 数据结构:线性数据结构(2)-队列(栈,队列,deques, 列表)
队列:FIFO 1.队列的抽象数据类型 队列抽象数据类型由以下结构和操作定义.如上所述,队列被构造为在队尾添加项的有序集合,并且从队首移除.队列保持 FIFO 排序属性.队列操作如下: Queue() ...
最新文章
- CodeAction_beta02 斐波那契 (多维DP)
- Java8 Predicate接口
- Flex Builder 2 注册码
- 剖析SQL Server执行计划
- 计算机是怎样知道屏幕位置的,如何看自己的电脑显示器是多少寸
- 运行报错 Permission denied: user=Admin, access=WRITE, inode=/:root:supergroup:drwxr-xr-x
- 408考研数据结构复习-时间复杂度与空间复杂度-附统考真题
- android 百度地图3.0定位,Android 百度地圖 SDK v3.0.0 (二) 定位與結合方向傳感器...
- 容器 - HashTable
- helperdialect mysql_Mybatis使用pageHelper步骤(动态分页)
- java剪刀石头布游戏心得体会,基于JAVA的剪刀石头布游戏设计——Java课程设计报告_...
- Qt 5 下载与安装详解
- 几何基础,多种矩阵的学习,世界坐标到屏幕坐标的两种转换方法,三种绘制方框的原理,hookd3d,hookopengl,骨骼透视,主播的秘密,FPS各种BT功能的原理 和检测对抗原理,UE4引擎,U3D
- 全球及中国有机橘子油行业投资前景预测与重点企业经营分析报告2021-2027年版
- Gesture-Recognition
- Pvr_Controller
- 初识QT之QTWidget窗口
- android 4.4 x86 iso,android x86官方版下载_android x86 4.4 iso 官方最新版[网盘资源]_零度软件园...
- 高德地图JSAPI测距功能优化
- CSS 文字两行显示,超出隐藏
热门文章
- 阿里飞冰官网 icework,一个集成框架,一键创建一个前端系统
- 计算机硬件框架,计算机硬件知识体系的结构框架研究
- 南京信息工程大学第二届程序设计大赛团体赛:B-负鼠的工资
- struts2表单验证里validato 的type值及其含义
- 《学习记录》“Python”判断奇数偶数
- python环境下opencv安装与一些坑
- 网络管理常用命令之Pathping 命令使用详解(图文)
- 微信 配置文件 android,微信支付,配置指南 (Android 端) – 热爱改变生活
- oss子账号_【最佳实践】授权子账号进行OSS图片样式设置-阿里云开发者社区
- 小米手机调试出现DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs