
数据结构
文章平均质量分 88
一个非常帅气的骚包
正在努力的小南同志
展开
-
并查集
什么是并查集并查集主要用于解决分组问题,它用来管理一系列不想交的集合,支持如下两种操作:合并:把两个不相交的集合合并为一个集合查询:查询某个元素的根节点,可以判断两个元素的根节点是否相等判断两个元素是否在一个并查集中。**最佳应用:**亲戚问题题目背景若某个家族人员过于庞大,要判断两个人是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。题目描述规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚原创 2021-01-13 23:51:26 · 1554 阅读 · 0 评论 -
深度优先及广度优先详解——java
以具体的例子来距离,假设我们现在有如下一个图:我们要遍历上述这个无向图,就需要用到深度优先和广度优先遍历了,图的邻接矩阵为:[0, 1, 1, 0, 0][1, 0, 1, 1, 1][1, 1, 0, 0, 0][0, 1, 0, 0, 0][0, 1, 0, 0, 0]提一嘴邻接矩阵的意思吧,就是说 A到B是可达的,也就是1,A到C也是1,A到D并没有路线,所以A到D 是0,也...原创 2020-05-02 15:30:22 · 817 阅读 · 0 评论 -
平衡二叉树AVL左旋,右旋,双旋——java
概念分析平衡二叉树也叫平衡二叉搜索树,又被称为AVL树,它能保证查询效率较高他具有以下特点:它是一颗空树或者它的左右两颗子树的高度差的绝对值不大于一,并且左右子树都是平衡二叉树,其也满足二叉排序树的特点小练习看过上述的概念之后,我们应该可以分辨哪些是平衡二叉树。为什么出现平衡二叉树上一章讲的是二叉排序树,其效率一般是大于链表的,那么如果我们添加的数列是{1,2,3,4,5,6}呢...原创 2020-04-29 23:58:43 · 1137 阅读 · 1 评论 -
二叉排序树——BST(java)
概念分析二叉排序树:对于二叉排序树的任何一个非叶子节点,要求左子结点的值比当前结点的值要小,右子结点的值比当前结点的值要大。如果有相同的值,可以将该结点放在左子结点或者右子结点。注:下文中所有BST均代表二叉排序树(BinarySortTree)图解我们将数组{7, 3, 10, 12, 5, 1, 9, 2}依次添加进BST中。建立一个BST叶子节点class BinarySor...原创 2020-04-28 22:19:30 · 467 阅读 · 1 评论 -
堆排序——Java与Go实现
概念分析堆排序是使用堆这种数据结构进行排序的方法。(好像是废话)思路分析首先,我们将待排序的数组看作一个完全二叉树将此二叉树转成大顶堆或者小顶堆将堆顶元素与堆的最后一个元素互换,之后丢弃最后一个元素重复第二步与第三步,知道堆只剩一个堆顶具体解析什么是完全二叉树?对于一个深度为k,有n个节点的二叉树,其所有的结点与深度为k的满二叉树对应的编号一样,则称之为完全二叉树。数组如...原创 2020-04-26 12:07:32 · 256 阅读 · 0 评论 -
约瑟夫问题——环形链表实现
1. 约瑟夫问题约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。2. 思路分析采用环形链表的方式,该链表中存储first结点与cur结点,分别表示第一个人与最后一个人,其中cur.next = first,即最后一个人指向第一个人。采取循环的方式进行,设置计数器times...原创 2020-03-18 23:28:42 · 776 阅读 · 0 评论 -
单链表——java
1. 单链表单链表是一种链式存储结构,其包括data域以及next域。data内存放数据,next指向下一个节点。1.1 巨丑的图解如图即是单链表的逻辑结构2. 操作2.1 节点类class Node<E>{ /** * data域 */ public E data; public Node<E> next;...原创 2020-03-15 10:51:42 · 111 阅读 · 0 评论 -
数组实现队列——java
1.队列队列是一种线性表,它在队列尾部插入元素,在队列头删除元素。2.设计采用静态数组的方式实现队列,并且测试使用,所以只支持int类型,感兴趣的朋友可以自己制作泛型队列。其中设计指向头的元素:front,指向最后一个元素的下一个:rear,队列的空间:maxSize,队列的数据:data[]。front 指向队列的头元素,从0开始rear 指向队列尾元素的下一个元素 从0开始 当fr...原创 2020-03-12 23:08:26 · 110 阅读 · 0 评论 -
数据结构——稀疏数组(java)
1.概念分析稀疏数组:二维数组中存在大量的无意义元素,而其中有意义的元素只占很少一部分,此时我们可以将其进行压缩,来达到减少内存消耗的作用。2.举例0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...原创 2020-03-07 10:17:11 · 147 阅读 · 0 评论 -
LeetCode最小栈
1.题目描述设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push...原创 2020-02-26 20:18:17 · 108 阅读 · 0 评论