数据结构
缓次郎
这个作者很懒,什么都没留下…
展开
-
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 评论 -
C 中的“泛型”复制/交换两个变量
写 C 的时候有时候需要用到交换两个变量,但是针对不同类型的变量要写不同的函数,很不方便。那么如何做到“泛型”交换两个变量呢?我们都知道C中的变量有地址这个概念,使用&变量操作就可以参看地址值,不用多说,要交换两个变量首先得找到这两个变量的地址,先来看最简单的通过指针交换两个整型变量:void swap_int(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}代码很简单,相信学过指针的都能看懂。泛型版交换两个变量现在的任务是原创 2020-06-16 19:24:06 · 566 阅读 · 0 评论 -
双链表 Python 实现
链表是其余链式结构的基础,一般来说链表搞懂了后面的栈和队列(只是链表加了些限定规则)也就懂了。再往后的二叉搜索树除了删除结点比较复杂之外其实其他操作(增改查)和链表的增改查都差不多。早先用 C 写过很多次链表,用 Java 也写过几次,转到 Python 就没思路了。其实套路都一样。// 结点,存数据域和前后指针typedef struct _NODE{ int item; struct _NODE *next; struct _NODE *prev;}NODE, *PNODE;// 链表原创 2020-05-28 14:04:05 · 261 阅读 · 0 评论