| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数据结构】队列(Queue) -> 正文阅读 |
|
[数据结构与算法]【数据结构】队列(Queue) |
目录? 一.队列(Queue)队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 后进后出的特点 进行插入操作的一端称为队尾 出队列,进行删除操作的一端称为队头 二.队列的使用在Java中,Queue是个接口,底层是通过链表实现的。 如图,队列中主要有这些方法 其实,1和2中方法的效果几乎差不多,但是我们经常使用的是方框2中的方法,某种程度上,2中的几个方法更好
?三.队列的模拟实现(单链表实现)首先,我们提出一个疑问:入队采用头插法还是尾插法呢? 如果入队采用的是头插法:入队的时候就是从头入:头插法【O(1)】 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 出队的时候:删除尾节点【O(n)】 如果入队采用的是尾插法:入队的时候就是从尾入:尾插法【O(n)】? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?出队的时候:删除头节点【O(1)】 可当我们给单向链表加一个last属性以标记尾节点时,采用尾插法入队的入队和出队的时间复杂度都是O(1),而采用头插法入队的入队是O(1),出队仍是O(n) 【这是因为要删除尾节点,就得找到尾节点的前一个】? 所以,我们如果要用单链表,采用尾插法入队更好,即尾巴入队,从头出队的方法 ? 但如果是双向链表,不管从哪边入队,时间复杂度都是O(1) 下面我们来看一下用单链表模拟实现队列的代码吧
? 四.循环队列实际使用中,我们有时还会使用一种特殊的队列——循环队列 循环队列通常用数组实现 ? 我们分析一下如何实现 数组下标循环的小技巧 1. 下标最后再往后(offset 小于 array.length): index = (index + offset) % array.length ?2. 下标最前再往前(offset 小于 array.length): index = (index + array.length - offset) % array.length ? ?如何区分空与满
? 例题? 力扣? ?设计循环队列:具体的解析都写在注释里啦~
五.双端队列(了解)下面我们再来简单的介绍一下双端队列(Deque) Deque是一个接口,使用时必须创建LinkedList的对象。 ? ? ?以上是一些队列的有关知识 ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:49:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |