![](https://img-blog.csdnimg.cn/f5ae209386f24878819df6b9c2b0d984.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 83
时间复杂度、空间复杂度、顺序表、链表、栈和队列、二叉树、排序
马尔科686
这个作者很懒,什么都没留下…
展开
-
【Map和Set】(二叉搜索树 查找操作 插入操作 删除操作 Map的使用 Map.Entry<K, V> Set的说明)
可以在右树里找到最小值,放到要删除的节点,问题就转化成删除右树的最左边的最小值.此时这种情况的删除就变成了上面两种删除的情况.Map.Entry 是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了。Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不。3. cur不是root,cur是parent.right,则parent.right = cur.right。左数找最大,右树找最小。原创 2024-03-18 23:51:41 · 822 阅读 · 0 评论 -
【算法】交换排序 选择排序 (冒泡排序 快速排序 单趟排序(Hoare大佬法) 单趟排序(挖坑法) 单趟排序(前后指针法))(直接选择排序 堆排序)
Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。把两个数一起选出来最小的扔左边,最大的扔右边。原创 2023-04-02 23:57:50 · 159 阅读 · 5 评论 -
【算法】插入排序 (直接插入排序 希尔排序)
排完之后的数据也是没有序的,但是相比于原数据,小的数据偏前面,大的数据偏后面,小的数据往前面挪相对快一点,大的也是。希尔排序法的基本思想是:先进行预排序,再进行最后的一个插入排序。堆排序、插入排序、希尔排序相比较,堆排序和希尔排序属于同一量级的。下面看更复杂的情况,当tmp = 1时,end要减到-1结束。如果比end的数小,就让end的数往后挪一位,将3覆盖掉了。如果tmp比end的数大或者相等,就继续放在end后面。预排序:间隔为gap的数据分为一组进行插入排序。1.预排序目的:接近排序。原创 2023-03-30 19:16:48 · 174 阅读 · 1 评论 -
【数据结构】堆(堆的实现 堆向下调整算法 堆的创建 堆的插入 堆的删除 堆的代码实现 堆的应用)
给出一个数组,逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们把它构建成一个堆。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。建堆和堆删除中都用到了向下调整,因此必须掌握了向下调整。先插入一个数组的尾上,再进行向上调整算法,直到满足堆。开始调整,一直调整到根节点的树,就可以调整成堆。1.将堆顶元素与堆中追后一个元素进行交换。堆是一个完全二叉树:分为小根堆和大根堆。大根堆:任何一个节点的值都>=孩子的值。前提:左右子树必须是一个堆,才能调整。原创 2023-03-27 20:54:29 · 449 阅读 · 1 评论 -
【数据结构】二叉树 (树的概念 二叉树的概念及结构 斜树 满二叉树 完全二叉树 堆向下调整算法 堆的创建 堆的插入 前序、中序以及后序遍历 求节点个数以及高度等 求k层节点数 返回x所在的节点)
树是一种非线性的数据结构,它是由n (n >= 0)节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点兄弟节点:具有相同父节点的节点互称为兄弟节点原创 2023-03-28 19:32:58 · 187 阅读 · 6 评论 -
【数据结构】栈和队列 (栈 栈的概念结构 栈的实现 队列 队列的概念及结构 队列的实现 栈和队列面试题)
栈也是一种线性表,数据在逻辑上挨着存储。只允许在固定的一端进行插入和删除元素。进行插入和删除操作的一端叫栈顶,另一端叫栈底。符合LIFO 先进后出。压栈:插入操作。出栈:删除操作。原创 2023-03-07 12:34:50 · 1463 阅读 · 5 评论 -
【数据结构】单链表(打印链表 创建malloc节点的指针 头插 尾插 头删 尾删 链表的销毁 链表的查找 某个位置去插入 ---- 在pos之前插入 )
顺序表在头部和中部插入删除数据都是不太合适的,因为要挪动数据时间复杂度为O(N)。扩容过程有消耗,如果需要大一点的空间可能不是原地扩容,拷贝数据,释放旧空间会有不少的消耗。扩容一般是2倍增长,会有一定的空间浪费。现在我们有一种这样的想法:我需要存一个数据,那么就开一块单独的空间去存这个数据,小块小块的开。现在把这些空间开出来,数据存起来后,他们之间如何建立关系呢?可以用指针,前一个节点存储后一个的指针,这个时候它们就链接在一起了。上面说的这种结构就是我们的链表。按需的申请和释放。原创 2022-10-22 13:29:51 · 911 阅读 · 1 评论 -
【数据结构】时间复杂度、空间复杂度(如何衡量一个算法的好坏 算法的复杂度 时间复杂度的概念 大O的渐进表示法 常见时间复杂度计算举例)
时间复杂度主要衡量一个算法运行的快慢,空间复杂度主要衡量一个算法运行所需要的额外空间,如今算法的时间复杂度我们需要特别关注。通过这两个维度我们可以评估算法的效率,它的时间复杂度是多少,空间复杂度是多少,如何优化它?空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。随着时代的发展,设备内存变大,空间复杂度的优化没有太大的需求了,相对而言不那么关注空间复杂度。得到的结果就是大O阶。原创 2022-08-22 06:25:42 · 398 阅读 · 0 评论