| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构学习笔记 1-2队列概述及LeetCode真题图解(Java) -> 正文阅读 |
|
[数据结构与算法]数据结构学习笔记 1-2队列概述及LeetCode真题图解(Java) |
1-2 线程池与任务队列(Task-Queue)队列基础知识
队列基于数组的实现方式:
队列的出队怎么实现呢?如图: 我们发现 在 队列的入队怎么实现呢?如图 我们想要插入一个元素,直接让 队列的假溢出 当我们想插入一个元素的时候, 这样我们就将10插入进去了,同时形成了 以上都是基于数组实现的队列,如果是基于链表实现队列的话,它还会有循环队列这个东西了吗?我们就不需要这个循环了,只要内存够用, 队列的典型应用场景
假如我现在想创建一个线程,创建好了之后我们又想再创建三个,然后又想把刚创建好的两个线程删掉,大家想象一下,如果我们的进程遇到了这样的一个场景,我们需要频繁的申请和销毁线程,线程处理完一个事件立刻就销毁了,但是没过一会这个线程就又有了一个任务,所以又要创建一个线程再处理,这也是我们多线程非常常见的一个问题,这个问题影响我们整个系统的性能,为什么呢?因为我们线程的创建是非常重量级的一个行为,它不像我们 int 一个变量特别特别的快,它是一个很花时间,很慢的一个操作,它带来了很大的上下文切换,我们应该尽量的避免多线程大量的申请和销毁,那我们该怎样避免呢?我们可以将我们的 创建一个 但是这个线程池还是会有一些问题的,我们四个线程分别都在执行任务,那这时候又来了一个任务,我们没有多余的线程了,这时候看起来我们只能将它拒之门外,但这样明显是很不友好的。 所以我们可以在线程池中创建一个 队列在工业中最常用的作用就是 LeetCode真题经典面试题—队列的封装与使用LeetCode622.设计循环队列难度: 基础数组实现一个循环队列。 对循环队列的概念有点模糊请移步上面看基础知识。 代码很简单,但对比最简单的队列加了一个防止溢出的取余操作,直接看我的题解即可。 LeetCode题解:代码实现 LeetCode641.设计循环双端队列难度: 跟上题类似,同样基于数组实现,但是队列是双端队列,两头都可以插入和删除元素,直接看题解。 LeetCode题解:代码实现 LeetCode1670.设计前中后队列难度: 本题的队列不仅仅可以从前后插入,在中间也可以插入。 前面都是用数组来设计队列,这题我们用链表来封装队列。 我们可以创建两个队列,并用链表来做,在前面我们说了,如果遇到队列中元素频繁的插入和删除,我们用链表是更好实现的。 我们维护两个双向队列,一个 这题用了三层封装,首先最底层用链表封装一个队列,然后创建两个队列来封装这个前中后队列。 根据题解注释来看代码。 LeetCodet题解:代码实现 以上这三题考验的都是我们的编码能力。 LeetCode933.最近的请求次数难度: 返回在 我们来使用一下java中自带的队列:
LeetCode题解:代码实现 总结
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 19:48:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |