数据结构与算法
文章平均质量分 89
一条粉肠与蛋散
我写的代码,像诗一样优雅
展开
-
数据结构与算法-阻塞队列
之前的队列在很多场景下都不能很好地工作,例如大部分场景要求分离向队列放入(生产者)、从队列拿出(消费者)两个角色、它们得由不同的线程来担当,而之前的实现根本没有考虑线程安全问题队列为空,那么在之前的实现里会返回 null,如果就是硬要拿到一个元素呢?只能不断循环尝试队列为满,那么再之前的实现里会返回 false,如果就是硬要塞入一个元素呢?只能不断循环尝试因此我们需要解决的问题有用锁保证线程安全用条件变量让等待非空线程与等待不满线程进入等待状态,而不是不断循环尝试,让 CPU 空转。原创 2023-07-10 15:15:14 · 417 阅读 · 0 评论 -
数据结构与算法-优先级队列
优先级队列,按照优先级别依次输出。原创 2023-07-09 16:06:59 · 385 阅读 · 0 评论 -
数据结构与算法-双端队列
双端队列、队列、栈对比定义特点队列一端删除(头)另一端添加(尾)栈一端删除和添加(顶)双端队列两端都可以删除、添加优先级队列优先级高者先出队延时队列根据延时时间确定优先级并发非阻塞队列队列空或满时不阻塞并发阻塞队列队列空时删除阻塞、队列满时添加阻塞Java 中 LinkedList 即为典型双端队列实现,不过它同时实现了 Queue 接口,也提供了栈的 push pop 等方法注2:不同语言,操作双端队列的方法命名有所不同,参见下表操作JavaJavaScript。原创 2023-07-08 22:46:33 · 341 阅读 · 0 评论 -
数据结构与算法-栈
计算机科学中,stack是一种线性的数据结构,只能在其一端添加数据和移除数据。习惯来说,这一端称之为栈顶,另一端不能操作数据的称之为栈底,就如同生活中的一摞书先提供一个栈接口/*** 向栈顶压入元素* @param value 待压入值* @return 压入成功返回 true, 否则返回 false/*** 从栈顶弹出元素* @return 栈非空返回栈顶元素, 栈为空返回 null*/ E pop();/*** 返回栈顶元素, 不弹出。原创 2023-07-03 16:48:19 · 34 阅读 · 0 评论 -
数据结构与算法-队列
计算机科学中,queue 是以顺序的方式维护的一组数据集合,在一端添加数据,从另一端移除数据。习惯来说,添加的一端称为尾,移除的一端称为头,就如同生活中的排队买商品先定义一个简化的队列接口/*** 向队列尾插入值* @param value 待插入值* @return 插入成功返回 true, 插入失败返回 false/*** 从对列头获取值, 并移除* @return 如果队列非空返回对头值, 否则返回 null/*** 从对列头获取值, 不移除。原创 2023-07-03 10:55:21 · 37 阅读 · 0 评论 -
数据结构与算法-递归
计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集比如单链表递归遍历的例子:return;自己调用自己,如果说每个函数对应着一种解决方案,自己调用自己意味着解决方案是一样的(有规律的)每次调用,函数处理的数据会较上次缩减(子集),而且最后会缩减至无需继续递归内层函数调用(子集处理)完成,外层函数才能算调用完成。原创 2023-06-28 14:42:41 · 33 阅读 · 0 评论 -
数据结构与算法-链表
在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续链表内还有一种特殊的节点称为哨兵(Sentinel)节点,也叫做哑元( Dummy)节点,它不存储数据,通常用作头尾,用来简化边界判断,如下图所示。原创 2023-06-25 12:12:46 · 71 阅读 · 0 评论 -
数据结构与算法-数组
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识因为数组内的元素是。原创 2023-06-22 21:56:01 · 62 阅读 · 0 评论 -
数据结构与算法-二分查找
数据结构与算法-二分查找原创 2023-06-22 21:53:58 · 48 阅读 · 0 评论