算法
缓次郎
这个作者很懒,什么都没留下…
展开
-
JS基础-深拷贝的实现
简单手写了个深拷贝,记录一下。原创 2022-06-09 17:10:29 · 63 阅读 · 0 评论 -
HuffmanTree 的 C 实现
哈夫曼树(最优二叉树) 提前复习数据结构课的知识 哈夫曼树的建立有四个步骤,总结成口诀就是(来源:王卓老师的数据结构视频): 建立森林全是根 选择两小新树 删除两小添新人 重复 2、3 剩单根 简单的解释: 首先输入 N 个值作为根建立的森林 在森林中选择两个权值最小的根(注意这里只是选根,有没有子树无所谓,到时候会合并) 删除这两个根(通常是把 parent 标记为非 0 值以在第 2 步中标记删除),将他们作为左右子树且将他们的权值的和作为新树的根,加入到森林 重复 2、3 步直到森林里只有一原创 2020-07-18 12:42:02 · 151 阅读 · 0 评论 -
堆的 C 语言实现
堆 堆是一种特殊的完全二叉树,其父元素总是比两个子元素大(小),根据这个特性我们可以用堆实现优先队列。 这里使用数组模拟堆。 上浮 新加入的元素为堆底元素,为了保持堆的性质,需要比较新加入的元素的值和根节点的值的大小,这里用大根堆举例。大根堆:父节点的值总是比两个子节点的值要大。 如果新加入的元素的值比父节点要大,交换他们的值,一直执行该操作直到到达堆顶或满足堆的性质。 代码如下: // 堆的上浮操作 // 新加入的元素默认在堆底,通过跟根元素比较大小来实现上浮 void swim(int idx, CMP原创 2020-07-03 20:22:46 · 191 阅读 · 0 评论 -
BST 基本操作的 C 语言实现
BST 增查都挺简单的,唯一复杂的在于删。删的实现可以参考这篇博客 // 没搞懂红黑树,来写下最简单的 BST // 2020年6月26日14:15:27 #include <stdio.h> #include <assert.h> #include <stdlib.h> typedef int TREE_DATA; typedef struct _NODE{ TREE_DATA val; struct _NODE *left; struct原创 2020-06-26 15:25:39 · 476 阅读 · 0 评论 -
用 DFS 生成数的排列
使用 DFS 生成数的可重复排列,代码如下: #include <stdio.h> long long count; // 结果计数变量 const int N = 50; // 结果数组最大大小 // 结果数组 & 当前数组下标 int ans[N], idx; /** * 打印整型数组 * @param a 目标数组 * @param size 数组大小 */ void prt_int_array(int const *a, int size){ for(in原创 2020-06-18 17:43:23 · 128 阅读 · 0 评论