
数据结构
文章平均质量分 87
数据结构知识汇总
记得开心一点啊
学习总结
展开
-
【数据结构】初识数据结构与算法
数据结构结构 = 数据+结构(数据是存储在计算机上的描述客观事物的符号,结构包括数据的逻辑结构和存储结构),数据结构可以看成是描述和组织数据的方式(之前学过的数组就是一种数据结构)一个算法所花费的时间与其中语句的执行次数成正比例,故可以把算法中的基本操作的执行次数作为算法的时间复杂度。世上算法千千万万,要想辨别算法的好坏就需要用到时间复杂度和空间复杂度,求算法的复杂度一般都是求最坏情况下的。的空间,而是变量的个数。时间复杂度用来衡量算法的运行时间。递归的时间复杂度:递归的次数 * 每次递归后执行的次数。原创 2023-08-04 05:29:10 · 77 阅读 · 0 评论 -
【数据结构】ArrayList与顺序表
要想删除数组中首次出现的某个数字得➀.先保证当前数组不为空,➁.再去寻找该数字的位置,➂.判断是否找的到,找不到抛出异常,找到了将指定位置后面的元素一起往前挪一个位置,➃.最后不要忘记记录有效数字个数的属性值减一。物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。要获取指定位置的元素需要➀.判断当前数组是否为空,➁.指定的位置是否合法,➂.最后再返回指定位置的元素。需要➀.先判断当前数组是否为空,➁.指定的位置是否合法,➂再更新指定位置的元素的值。原创 2023-09-01 19:03:18 · 91 阅读 · 0 评论 -
【数据结构】LinkedList与链表
LinkedList的底层就是一个双向链表,和ArrayList一样,LinkedList。若为空链表,则直接插入;List(只要是实现了Colection接口且泛型类型是E或其子类的都可以)通过上图我们还可以发现与ArrayList不同, LinkedList并。链表的结构非常多样,分单向和双向,带头和不带头,循环和非循环。链表相比顺序表的优点是可以随用随取,插入删除不需要挪动元素。我们有了单链表的基础后,自己实现一个双向链表也就比较简单了。原创 2023-09-03 19:34:19 · 123 阅读 · 0 评论 -
【数据结构】栈和队列
进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。队列是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列同样可以通过数组和链表实现,下面我们一起通过双向链表来实现一个队列。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。在Java集合中Queue是个接口,底层是通过双向链表实现的。Java集合里的stack就是栈,它的底层是通过数组实现的。通过数组和链表都可以实现栈,下面我们通过数组来实现一个栈。只允许在固定的一端进行插入和删除元素操作。都是动态的顺序表,不同的是。原创 2023-09-05 13:40:08 · 58 阅读 · 0 评论 -
【数据结构】二叉树
•二叉树的节点•二叉树的前序遍历•二叉树的中续遍历•二叉树的后续遍历•二叉树的层序遍历•二叉树的节点个数•二叉树的叶子节点个数•二叉树第k层节点数•二叉树高度•二叉树中是否含有值为val的节点•二叉树是否为完全二叉树什么是树二叉树是数的一种,要了解什么是二叉树首先得知道数据结构中树是什么东东。数据结构中的树当然不是指路边的树木,它指的是具有像树木一样从树干开枝散叶的一种结构。简单来说,树就是一种非线性的数据结构,它是由nn>=0。原创 2023-09-09 16:37:41 · 192 阅读 · 0 评论 -
【数据结构】二叉树的非递归遍历与最近公共祖先
2.因为获取栈内节点的右节点时没有将栈内节点出栈,故当遍历完该节点的右节点后才会轮到该节点出栈,此时若该节点的右节点不为空,就需要判断该节点的右节点是否被打印过了,不然就会再遍历一遍该节点的右边。如上图所示,先遍历根节点和其左子树,将遍历到的节点入栈,之后再取出栈内的节点遍历其右子树。D,C的最近公共祖先是A;E,F的最近公共祖先是B。1.因为根节点是最后打印的,故获取栈内节点的右节点时并不能将栈内的节点出栈。我们一般使用递归遍历二叉树,但借助栈我们也可以通过非递归遍历二叉树。二叉树的最近公共祖先。原创 2023-09-10 20:49:11 · 644 阅读 · 0 评论 -
【数据结构】PriorityQueue和堆
null)的时候,是优先使用比较器比较的,而用户没有传比较器(comparator==null)的时候,堆的节点的类型必须是实现了comparable接的。通过观察源码可以发现:当容量小于64时,是按照oldCapacity的2倍+2的方式扩容的,当容量大于等于64,是按照oldCapacity的1.5倍方式扩容的 ,如果容量超过了MAX_ARRAY_SIZE,按照MAX_ARRAY_SIZE来进行扩容。堆是一颗特殊的完全二叉树,我们可以通过向下调整一颗普通的二叉树来创建堆,这里以创建小根堆为例。原创 2023-09-13 19:35:14 · 112 阅读 · 0 评论 -
【数据结构】七大排序算法详解
如果分割点随机选择,则最坏时间复杂度为O(n^2)的概率很小,平均时间复杂度为O(n log n)。(排序一组逆序序列):对n-1个元素进行插入操作,每个元素对应的移动次数依次为:1、2、3、....、n-1,等差数列求和得(n-1)(1+n-1)/2=n(n-1)/2=(n^2-n)/2,故算法时间复杂度为。对n-1个元素进行操作,每个元素对应的比较次数依次为:n-1,n-2,n-3,...,1,等差数列求和得(n-1)(1+n-1)/2=n(n-1)/2=(n^2-n)/2,故算法时间复杂度为。原创 2023-09-18 21:21:17 · 2776 阅读 · 0 评论 -
【数据结构】二叉搜索树与Map和Set
因此,为了保证每个节点的左右子树高度相差不超过1,这才有了AVL树(通过左旋,右旋,左右双旋调整高度差),而为了减少AVL的旋转次数,这才有了红黑树(通过染色来保证平衡,不需要每次都调整,复杂度相对较低)。③.由于二叉搜索树左子树的节点值小于根节点,右子树的节点值大于根节点,故二叉搜索树还支持范围查询。的容器或者数据结构,它适合多态查找(查找时能进行一些插入和删除的操作),其搜索的效率与其具体的实例化子类有关。个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树的高度越高,查找效率越低。原创 2023-09-22 08:51:30 · 317 阅读 · 0 评论 -
【数据结构】哈希表
处理哈希冲突的方法包括开放地址法、链表法、再哈希法等。虽然哈希表一直在和冲突做斗争,但在实际使用过程中,我们认为哈希表的冲突率是不高的,冲突个数是可控的,也就是每个桶中的链表的长度是一个常数,所以,通常意义下,我们认为哈希表的插入/:在发生哈希冲突时,二次探测从冲突槽的下一个槽开始,依次查找每个槽,但是探测的步长是由一个二次函数计算出来的,例如:步长为1^2,2^2,3^2,4^2,…开链法的基本思想是将哈希表中每个位置上的元素不再是单个的值,而是一个链表,当发生哈希冲突时,将新的元素添加到链表的末尾。原创 2023-09-23 16:16:16 · 371 阅读 · 0 评论