二叉树遍历算法主要包括递归遍历方式、非递归遍历方式。而每一种方式又分为先序遍历、中序遍历、后序遍历。如果你的二叉树是二叉排序树,希望遍历出来的结果是有序的,那么无论是递归还是飞递归都需要使用中序遍历。另外,有时,我们也需...
Heap 数据结构一般都被看做是一棵完全二叉树对象,我们知道对于完全二叉树可以使用连续的数组空间来存储各个结点关系。 Heap 是一种非常重要的数据结构,使用 Heap 可以实现高效的排序、构建优先级队列等等。Heap ...
哈希表也叫做散列表,它通过 key 能够快速访问 value。 我们知道数组通过 key 去搜索元素效率比较低,但是通过位置来访问速度是非常快的。例如:你要搜索值为 5 的元素,那么需要从头开始遍历,效率较低。但是,如要...
TextRank 构造的是带权无向图,PageRank 构建的是带权有向图。 通过一个例子来理解 TextRank 算法思想,假设内容如下: 人生就像一杯苦茶,不会苦一辈子,但会苦一阵子 接下来,对上面进行分词,去除停用...
栈 stack_one 中的元素都是 int 类型,要求使用另外一个栈容器 stack_two 来实现栈 stack_one 中的元素能够从栈顶到栈底的降序排列(从大到小)。 算法思路: 从栈 stack_one 中弹出...
假设我们将 10、20、30、40、50 压入栈中,则元素在栈中从栈顶到栈底的顺序为:50、40、30、20、10。我们的目标是使用递归实现一个算法,将 Stack 容器中顺序进行逆序,变为:10、20、30、40、50...
Stack 容器的特性是先进后出,Queue 容器的特性是先进先出。我们这里可以使用两个 Stack 容器来实现 Queue 容器,一个 Stack 用于存储数据,当需要弹出队头元素时,就将第一个 Stack 容器中的元...
要求:容器既能满足栈的基本操作,又能获得最小值。思路:使用两个栈容器来实现。一个栈用于正常栈操作,另外一个栈容器用于获得最小值。实现时,最主要的是元素的入栈操作。具体步骤参考如下代码注释。 程序输出结果:
PageRank 算法是谷歌根据网页重要程度给网页排名的算法,该值越高说明网页越重要,当用户进行相关搜索时,越有可能优先展现给用户。 我们通过一个例子来理解 PageRank 的算法计算过程,我们现在有 3 个网页,网页...
STL 中的 vector 容器就是一个基于模板泛型的动态数组,它和原生数组不同的之处在于:原生数组在定义时需要指定长度,无法随着需要自动增长,而动态数组则可以根据元素个数自动扩展内存。动态数组可以使用 C 来实现,但是...
第二种链表的实现方式利用了 C99 中可伸缩数组成员这个特性,该特性使得我们在进行链表内存管理时,减少内存的申请和释次数。 第一种实现方式,我们在创建结点时如下图所示: 结点内存需要 malloc 一次,数据占用的内存也...
C 实现链表的方式有多种,这篇文章我们将实现一种简单的单向链表。C 语言中由于没有模板技术,实现能够存储不同类型的数据就需要根据实际需求来设计链表。 一种方法是链表可以只存储用户数据的指针,另外一种则将用户数据拷贝到链表...