数据结构与算法
文章平均质量分 93
通过java代码演示,数据结构与算法。
i大魔王Leo
不忘初心,不畏将来。
展开
-
10、数据结构与算法——堆
二叉树是一种数据结构,它是由n(n≥0)个节点的有限集合构成,每个节点最多有两个子节点,通常分别称为左子节点和右子节点。n:表示二叉树中的节点总数,它可以是一个任意非负整数。n≥0:这意味着二叉树可以包含任意数量的节点,包括零个。即:当n=0时,表示这是一棵空二叉树,它不包含任何节点。当n>0时,表示二叉树至少包含一个节点,并且根据定义,这个节点可能还有0个、1个或2个子节点,依此类推,形成一个节点的有限集合。二叉树如下图:每个节点最多有两个子节点,通常分别称为左子节点和右子节点。原创 2024-02-02 03:00:57 · 795 阅读 · 0 评论 -
9、阻塞队列
例如,当一个生产者线程因 notFull 条件变为真而被唤醒时,它需要重新获取锁才能入队,但在竞争过程中可能被其他线程抢占,导致再次陷入等待状态。那么由添加线程唤醒其他的添加线程(否则就由获取方法中的获取线程唤醒添加线程)。如果在添加之前,队列是空的,那么需要当前添加线程去唤醒取值线程。如果队列在当前取值线程在取值前,队列中的值是满的,那么需要当前取值线程唤醒添加线程。级联通知:一个线程完成任务释放资源后唤醒其他等待的线程,被唤醒的线程继续执行又可能导致其他线程被唤醒,这种间接影响可以类比为级联通知。原创 2024-01-31 01:11:35 · 890 阅读 · 0 评论 -
8、优先级队列
*** 定义数据类型接口/*** 获取值的排序编号* @return/*** 获取值* @return堆是一种特殊的树形数据结构,通常实现为完全二叉树或满二叉树。堆又分为两种类型最大堆(Max Heap)和最小堆(Min Heap)二叉树是一种数据结构,它是由n(n≥0)个节点的有限集合构成,每个节点最多有两个子节点,通常分别称为左子节点和右子节点。n:表示二叉树中的节点总数,它可以是一个任意非负整数。n≥0:这意味着二叉树可以包含任意数量的节点,包括零个。原创 2024-01-25 01:35:05 · 1038 阅读 · 0 评论 -
7、双端队列
双端队列(Double-ended Queue,简称deque)是一种线性数据结构,它允许在两端进行插入和删除操作。这意味着与普通队列(FIFO,先进先出)或栈(LIFO,后进先出)不同,双端队列的使用者不仅可以从队列的一端(通常称为“尾”端)添加元素(enqueue),也可以从这一端删除元素(dequeue)。同时,双端队列还支持在另一端(通常称为“头”端)执行相同的操作,即在队列头部添加(enqueue at head)和删除(dequeue at head)元素。原创 2024-01-19 04:10:13 · 1870 阅读 · 0 评论 -
6、栈
*** 入栈:将一个元素添加到栈顶。* @param value 值* @return 压入成功返回 true, 否则返回 false/*** 出栈:移除并返回栈顶的元素。* @return 栈非空返回栈顶元素, 栈为空返回 null*/ E pop();/*** 查看栈顶元素:不移除栈顶元素的情况下查看其值。* @return 栈非空返回栈顶元素, 栈为空返回 null/*** 判断是否为空栈:检查栈中是否包含元素。原创 2024-01-17 00:04:22 · 738 阅读 · 0 评论 -
5、队列
队列是一个线性数据结构,可以想象成一个两端开口的管道或实际生活中的排队场景。一端用于添加元素(称为enqueue或入队),另一端用于移除元素(称为dequeue或出队)。新元素只能从队尾添加,而删除或访问元素则总是从队头进行。环形数组(Circular Array)是一种特殊的数组,它模拟了一个可以循环利用其空间的数据结构。其逻辑结构表现为一个首尾相连的“环”或“圈”。在物理上,它仍然是一个线性存储结构,即普通的数组,但它的读写操作遵循循环规则。原创 2024-01-16 17:42:55 · 974 阅读 · 0 评论 -
4、递归
单独对于冒泡排序法,如下方式是最优解,后面的递归冒泡排序法仅仅是展示多种冒泡排序的实现方式。所以递归冒泡排序法性能肯定是要差一些的。原创 2024-01-12 13:29:14 · 893 阅读 · 1 评论 -
3、链表
**1. 单向链表*/// 头部节点/*** 节点定义(内部类)*/// 数据域int value;// 指针域,指向下一个节点Node next;// 构造函数//头部节点//尾部节点/*** 头部节点和尾部节点设置默认值。*///设置头部节点默认值//设置尾部节点默认值//设置头部节点的后节点为尾节点//设置尾部节点的前节点为头部节点//前节点//节点值//后节点/*** @param prev 前节点* @param value 节点值。原创 2024-01-05 22:46:38 · 786 阅读 · 1 评论 -
2、数组
数组作为一种简单且高效的数据结构,在满足特定条件(特别是当需要频繁且无序地访问元素时)的情况下具有显著的优势。然而,其固定大小和插入/删除操作的限制意味着在某些灵活度需求高的场景下,其他数据结构可能是更优的选择。原创 2024-01-02 14:38:04 · 731 阅读 · 1 评论 -
1、二分查找
因为查找的目标值有可能是开始索引或者是结束索引。如果只用只有小于,那么会导致直接进入不了循环。比如查找的值是数组中的第一个值。或者数组中的值只有一个。那么开始索引和结束索引都是0 那么会导致进入不了循环。原创 2023-12-27 15:33:30 · 914 阅读 · 1 评论