
数据结构与算法
文章平均质量分 57
入门级
白糖熊
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【二叉树搜索树/二叉排序树】BST树的创建,插入,找最小结点的下一个节点/找最大结点的前驱
**二叉树搜索树**:【二叉排序树】1. 每个结点都有一个作为搜索一句的关键码,所有的结点的关键码给互不相同2. 左子树(如果存在)所有结点的关键码都小于根结点的关键码3. 右子树(如果存在)所有结点的关键码都大于根节点的关键码4. 左子树和右子树也都是二叉搜索树。原创 2024-01-31 09:20:21 · 486 阅读 · 0 评论 -
【数据结构】(分治策略)中位数的查询和最接近点对问题
寻找一组字符串中第k小的数,返回其值和下标。不可以有重复值(在缩小规模的时候,会导致程序死循环)相对位置的转换体现了分治策略的思想。1.将待查询数组进行划分,得到num[left] 此时的下标 i(该值的下标将不会在变化)2.i-left+1计算出i的相对位置j;3.如果待查的k小于等于j,则从i的左边查,如果大于,从i的右边查。(说明i之前的下标都没有,则待查的k也减去相应j)4.当只剩下一个元素,并且k等于1.返回当前值。原创 2024-01-31 09:15:11 · 916 阅读 · 0 评论 -
【数据结构】分治策略
1. 该问题的规模小到一定程度就容易解决。2. 把大问题分解成小问题,是将问题的规模变小,而不是将问题变小3. 使用小规模的解,可以合并,该问题原规模的解 4. 该问题所分解的各个子模块是相互独立的。原创 2024-01-31 09:11:03 · 1252 阅读 · 0 评论 -
【数据结构】快速排序,基数排序/桶排序
桶排序:低位优先,所有数据从(个位)开始依次放入10个桶内(入队,再从桶里取出,直到完全有序)。基数(桶)排序:低位优先,所有数据从低(个)位开始,依次放到对应的桶内(入队),再接着从桶内取出(出队),直到完全有序 时间复杂度O(dn) 空间复杂度O(n) 稳定吗如下图::获取最大值的位数,来作为循环遍历位数的条件:进行将所有数据,按照位数放入桶中,放完之后,再取出来放到arr数组中:获取当前位数所在桶的序号。index获取。原创 2024-01-31 09:07:42 · 875 阅读 · 0 评论 -
【哈希】哈希表|除留取余法|哈希冲突(拉链法interv)|一致性哈希|虚拟节点
广义上是一种思想,不是一个特定的东西,只要算法设计中使用到了哈希思想,就可以叫做哈希函数。存储地址 = f(关键字)可以直接通过关键字而不是去一次比较,直接获取存储地址。散列技术,其实是将存储位置和关键字之间确立了一种对应关系f,使得每一个关键字(key)都对应一个存储位置。查找的时候通过确定的对应关系,找key值的映射f(key)。这种对应关系f就是散列函数(哈希函数),采用散列技术将记录存在一片连续的存储空间,这个空间就被称为哈希表。原创 2024-01-31 09:03:57 · 1335 阅读 · 0 评论 -
【动态规划】矩阵连乘问题
j个矩阵连乘的积 = R(第 i 个到第k矩阵的积 ) + U(第k+1到最后一个矩阵的积) + R*U。,所对应得数组p下标所对应的值正好是R,U相乘需要的行和列。显而易见,三个矩阵相乘,有两种结合方式,(AB)C 比 A(BC)的值小的多。因此我们把它们进行划分,假设从第k个矩阵开始划分。如果是从第一个到第四个矩阵的乘积,则可以划分为如下:其中。根据上面的代码,略加修改可以得到整个划分的过程。123456 划分。根据上面两幅图可以看出,原创 2022-11-28 21:23:01 · 4001 阅读 · 0 评论 -
【动态规划】0/1背包问题
(受到物品的数量和背包的容量的影响)表示此时背包中物品的总价值。表示第i个物品的重量。表示第i个物品的价值。原创 2022-11-28 15:11:00 · 115 阅读 · 0 评论 -
【动态规划】最长公共子序列
4.根据计算最优值时得到的信息,构造最优解。1.找出最优解性质,并刻画其结构特征。3.以自底向上的方式计算最优值。2.递归定义最优值。原创 2022-11-27 23:48:49 · 456 阅读 · 0 评论 -
【AVL树】双旋转,插入以及删除
并且当存在左子树或者右子树,插入新的结点到左子树或者右子树,当前插入节点的parent的高度不会发生变化。原因:因为插入一个新的结点不会使树的高度加2,只会让树的高度加1.并且平衡因子最大为2,最小为-2.AVL树再平衡后,在插入新的节点后,不需要在进行回溯和调平。平衡因子小于0(-1),往右边的树插入。平衡因子大于0(1),往左边树插入。大于0进行左单旋,小于0进行右单选。原创 2022-11-25 23:32:46 · 216 阅读 · 0 评论 -
【高度平衡的二叉搜索树】 AVL树的创建,左旋转和右旋转
向上开始计数,到此节点(包括此节点)的数值为此节点的高度。,到该节点所经过的节点数(包括此节点)为树的深度。树的高度可以这样理解:把整棵树想象为一栋楼房,从。计算一个节点的深度,从。原创 2022-11-24 22:25:13 · 169 阅读 · 0 评论 -
【哈夫曼树】创建哈夫曼树
在一棵树中,从一个结点到另外一个结点所经过得所有的结点,我们成为两个结点之间得路径。从A到叶子结点E的路径就是:A->B->D->E;在一棵树中,从一个几点到另外一个结点所经过的边的数量,就是路径长度。从根结点A到叶子结点E,共经过了3条边,因此路径长度是3。树的每一个结点,都可以拥有自己的“权重”(weight),权重在不同的算法中起到不同的作用。结点的带权路径长度 = 树的根节点到该结点的路径长度 * 该结点权重。原创 2022-11-22 13:16:29 · 5085 阅读 · 1 评论 -
【理解二叉树】非递归,中序遍历/先序遍历/后续遍历/层次遍历/S型打印
【递归】先序,中序,后序遍历。原创 2022-10-15 00:26:14 · 239 阅读 · 0 评论 -
【链表刷题2】
3,若都不为空,则比较list1和list2值的大小,若list1小于等于list2,则list1链接在头节点之后,否则list2链接在头节点之后。4.判断list1和list2是否遍历完,没遍历完的部分跟在p->next后。1.给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。2.判断list1和list2 是否为空,分析为空情况。原创 2022-10-10 23:31:15 · 110 阅读 · 0 评论 -
【排序】选择排序、堆排序(大根堆【升序】,小根堆【降序】)
思想:默认0号位,定义为min,再从第二位起,遍历所有,找到一个更小的,把下标赋给min,遍历结束,如果当前i下标的值不是min,则说明min更新,有更小的值的下标,所以min值和i值交换。:是基于完全二叉树的数据结构,分为大根堆和小很堆。只关注:父子结点的关系,不关注左右子数的大小关系。大根堆:每个结点的值都大于它的左子树和右子树。小根堆:每个结点的值都小于它的左子树和右子树。叶子结点,就是最末端的结点,没有枝杈的结点。父结点下标:(i-1)/2 (i为下标元素)通过父节点的坐标,推出子节点的下标。原创 2022-10-02 21:51:26 · 4069 阅读 · 0 评论 -
【排序】冒泡排序/插入排序/快速排序/归并排序
否则为真,因此当有序的时候,tag = true,不需要交换,皆可以少遍历一次。:最开始把每个数单独为一组,局部有序,直到把所有数据化分为1组,则全局有序。局部区域中的变量未初始化值,会被定义为随机值!没交换一次 ,tag = false。初始化区域和未初始化区域(.bbs)以及字符串已读区域(.rdata)全局变量 未初始化,默认为0;原创 2022-09-20 10:30:32 · 104 阅读 · 0 评论 -
【排序】直接插入排序|希尔排序
使用场景:1.数据规模较小(n很小),则n^2也不会大。使用场景:数据量大。(直接插入排序的优化版)2.待排序列越有序,则越快。原创 2022-10-01 00:17:34 · 254 阅读 · 0 评论 -
两个栈实现一个队列| 两个队列实现一个栈
【代码】两个栈实现一个队列。原创 2022-09-29 01:50:12 · 132 阅读 · 0 评论 -
【线性表】
操作系统是计算机系统的核心系统软件, 主要功能过是 负责控制和管理整个系统,通过,基本概念,原理和方法,清楚展现当代操作系统给的本质和特点。计算机系统,操作系统,进程描述和控制,线程,微内核,并发性,内存管理,虚拟内存,单处理器调度,多处理器和实时调度,I/O管理和磁盘调度,文件管理,嵌入式操作系统吗,计算机安全技术分布式操作系统1.背景,提供关于计算机组成与系统结构的综述,重点讲述与操作系统设计相关的主题,进程,2.存储器,全面讲述存储器管理技术,包括虚拟存储器3原创 2022-09-28 23:22:52 · 175 阅读 · 0 评论 -
【队列】循环队列,链式队列
(用循环链表就可以实现)原创 2022-09-28 23:06:17 · 773 阅读 · 0 评论 -
【双向循环链表】
【代码】【双向循环链表】原创 2022-09-28 18:33:40 · 152 阅读 · 0 评论 -
【栈和队列】顺序栈/链栈
公司一般将plist指向循环链表的尾部,这样在处理头插和尾插就可以让时间复杂度变得最小。顺序表的表头插入和删除时间复杂度为O(n)表尾插入删除的时间复杂度为O(1):仅限制在表尾进行插入和删除线性表。:先进先出(用循环链表就可以实现)表尾称为栈顶,另一端称为栈底。原创 2022-09-26 19:06:09 · 148 阅读 · 0 评论 -
【链表】刷题
(删除一个节点的复杂度为O(1))(这个删除的结点不能是尾结点)节点当做一个鞋盒,直接将后面的鞋一次放进要删除的这个结点。使用push_front直接插入。原创 2022-09-24 00:10:33 · 195 阅读 · 0 评论 -
【单链表】【双向链表】【循环链表】
结构体变量,nullptr 不一定是0;但是 非结构体变量就是0;原创 2022-09-21 22:34:19 · 125 阅读 · 0 评论 -
理解二叉树(创建二叉树)【2】创建二叉树
创建二叉树:一般创建方式:将每个结点的空指针引出一个虚结点,其只为特定值,比如“#”示例代码:先序:ABCDEFGH中序:CBEDFAGHBtNode* CBTree1() // ABC##DE##F##G#H##{ BtNode* s = NULL; ElemType elem; cin >> elem; if (elem != '#') { s = Buynode(); s->data = elem; s->leftchild = CBTree1原创 2022-05-25 18:05:04 · 125 阅读 · 0 评论 -
理解二叉树 【1】
二叉树的结构:特点:每个节点最多有两棵子树,所以不存在度大于2的节点。左子树和右子树是有顺序的,顺序不能颠倒即使树中的某个节点只有一棵子树,也要区分左子树或者右子树。度:结点拥有的子树个数(树的度是,树内各结点的度的最大值)深度/高度:结点的层次从根开始定义为第一次层。由上而下,树中结点的最大层数,即为树的深度。二叉树分类: 空二叉树 满二叉树(一个二叉树的左右孩子是满二叉树,一定是满二叉树吗? 不一定) 完全二叉树(一个二叉树的左右孩子都是完全二叉树,一定是,完全二叉树吗?不一原创 2022-05-24 21:35:03 · 281 阅读 · 0 评论