数据结构
文章平均质量分 86
luoxn28
杭州电子科技大学 Linux爱好者
展开
-
二叉树 - 数据结构
二叉树具有很多重要特征:1. 二叉树的原创 2014-09-20 17:29:34 · 746 阅读 · 0 评论 -
二叉树最大宽度(递归方式和非递归方式)
求二叉树的最大宽度,该问题可以有两种方式来解决。递归方式和非递归方式。1、递归方式为先递归求得每一层的宽度,然后就得出了最大宽度所在的层数和该层的节点个数,即为最大宽度。2、非递归方式为从树的顶层按层计算,从上到下直到叶子节点为止,类似于广度遍历方法,从而计算得出最大宽度所在的层数和该层的节点个数关于二叉树的定义点击二叉树#include #include using name原创 2015-10-24 10:13:09 · 8670 阅读 · 1 评论 -
加权无向图
用数学语言讲,设G为图,对图的每一条边e来说,都对应于一个实数W(e)(可以通俗的理解为边的“长度”,只是在数学定义中图的权可以为负数),我们把W(e)称为e的“权”。把这样的图G称为“加权图”。加权无向图数据结构使用邻接表来存储源代码示例:#include #include #include #include #include using namespac原创 2015-11-16 14:15:58 · 6288 阅读 · 0 评论 -
Kruskal算法
Kruskal算法是求图最小生成树的一种算法,另外一种是Prim算法。 Kruskal算法思想:Kruskal算法按照边的权重(从大到小)处理它们,将边加入最小生成树中,加入的边不会对已经加入的边构成环,直到树中含有V-1条边为止。源代码示例:#include #include #include #include #include using names原创 2015-11-16 14:33:35 · 784 阅读 · 0 评论 -
拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。(摘抄自:拓扑排原创 2015-11-16 14:05:27 · 502 阅读 · 0 评论 -
有向图的可达性
有向图中,我们可以使用深度优先遍历方式来测试有向图的可达性。这样给出一个节点,我们就可以知道是否存在一个路径从起点(就是从该点进行深度优先遍历)到达该节点。它解决了单点连通性的问题,使用用例可以判定其他顶点和给定的起点是否连通。 在存储图的数据结构中,我们使用邻接表来存储有向图。下图就是一个存储的示例:源代码如下:#include #include #原创 2015-11-16 11:22:59 · 5850 阅读 · 0 评论 -
有向图是否有环
在和有向图相关的实际应用中,有向环特别的重要。其中就可以解决一组任务的执行顺序问题,因为有的任务必须在另一个任务完成之后才能开始进行,此时就需要判断图中是否有环,有环的话是不能对这些任务的排序的。 左图就是有环图 下图没有形成环,就可以进行排序操作。源代码示例:#include #include #include #include usin原创 2015-11-16 13:37:23 · 1396 阅读 · 0 评论 -
Prim算法
Prim算法是求图(无向图)中最小生成树的一种算法,另外一种是Kruskal算法。 Prim算法思想:Prim算法的每一步都会为一棵生长中的树添加一条边。一开始这棵树只有一个顶点,然后会向它添加V-1条边,每次总是将下一条连接树中的顶点与不在树中的顶点且权重最小的边加入树中。源代码示例:#include #include #include #incl原创 2015-11-16 14:25:37 · 1993 阅读 · 0 评论 -
无向图
图是由一组顶点和一组能够将两个顶点相连的边组成的。无向图的边仅仅是两个顶点之间的连接,没有方向。当且仅当一幅含有V个节点的图G满足下列5个条件之一时,它就是一棵树:l G有V-1条边且不含环l G有V-1条边且是连通的l G是连通的,但删除任意一条边都会使它不再连通l G是无环图,但添加任意一条边都会产生一条环l G中任意一对顶点之间仅存在一条简单路径原创 2015-10-31 20:29:18 · 937 阅读 · 0 评论 -
哈夫曼编码-Huffman
Huffman编码的思想是放弃文本文件的普通保存方式,不再使用7位或者8位二进制数表示一个字符,而是用较少的比特表示出频率高的字符,用较多的比特位表示出频率低的字符。详细内容参考:哈夫曼编码(百度百科) Huffman编码流程数据压缩流程1、 读取输入2、 将输入中的每个char值得出现频率制成表格3、 根据频率构造Huffman编码树4、 构造编译表,原创 2015-10-07 14:35:15 · 829 阅读 · 0 评论 -
基因数据压缩算法(ACTG) C++
基因数据压缩算法是一个初级的数据压缩算法,基因数据如下所示"ATAGATGCAT",如果使用标准的ASCII编码(每个字符1个字节),这个基因字符串的流长度是10*8=80位。 这些字符是由4种不同的字符组成,所有我们可以使用双位编码压缩,比如 A:00, C:01,T:10, G11,压缩之后我们就可以在一个字节存放4个基因字符了,当数据比较大时,压缩效率为25%。原创 2015-09-14 16:14:01 · 3654 阅读 · 0 评论 -
红黑树理解 - 数据结构
红黑树 红黑树是很多平衡树的一种,保证最坏情况下基本动态几何操作时间复杂度为O(log(n)) 1、红黑树性质(1) 每个节点是红色的,或者是黑色的(2) 根节点是黑色的(3) 每个叶节点(nil)是黑色的(4) 如果一个节点是黑色的,则它的连个子节点都是黑色的(5) 对每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑原创 2015-05-07 18:31:21 · 10863 阅读 · 3 评论 -
双向链表 - 数据结构
linklist CreatDlist(void){ char ch; linklist head; linknode *p, *h, *r; head = (linknode *)malloc(sizeof(linknode)); head->next = NULL; h = head; r = head;原创 2014-09-16 22:15:44 · 619 阅读 · 0 评论 -
链表 - 数据结构
// shtypedef char datatype;typedef struct node{ datatype data; struct node *next;}linknode;typedef linknode *linklist;原创 2014-09-15 17:40:30 · 895 阅读 · 0 评论 -
树 - 数据结构 (二叉查找树、AVL树)
看了《数据结构与算法分析》的第4章,讲的树de原创 2014-10-27 21:44:01 · 1020 阅读 · 0 评论 -
表、栈、队列 - 数据结构
1. 链表记录一下《数据结构与算法分析 - C语言描述》的第3章,表、栈和原创 2014-10-29 22:07:29 · 890 阅读 · 0 评论 -
散列 - 数据结构 (分离链接法、开放定址法)
散列是一种用于以常数平均时间执行插入、删除和查找的技术。理想的散列数据结构只不过是一个包含有关键字的具有固定大小的数组。典型情况下,一个关键字就是一个带有相关值(工资信息等)的字符串。 散列函数主要的问题就是解决冲突的消除问题。如果当一个元素被插入时另一个元素已经存在(散列值存在),那么就会产生冲突。解决这种冲突的方法有几种,一般用最简单的两种:分离链接法、开放地址法原创 2014-11-27 17:01:29 · 2958 阅读 · 2 评论 -
优先队列 - 数据结构 (二叉堆)
优先队列包括二叉堆、d-堆、左式堆、斜堆、二项队列等1、二叉堆 堆是一棵被完全填满的二叉树,有可能例外的是在底层,底层上的元素从左到右填入。这样的树称为完全二叉树。 堆序的性质:在一个堆中,对于每一个节点X,X的父亲的关键字小于(或等于)X中的关键字,根节点除外(它没有父节点)。完全二叉树可以用数组实现。原创 2014-11-30 19:28:48 · 1077 阅读 · 0 评论 -
排序 - 数据结构
插入排序原创 2014-10-28 15:22:11 · 865 阅读 · 0 评论 -
递归翻转单链表
单链表的翻转有2种方法,非递归方法和递归方法。1、在递归的方法中的做法是:(1)、找到最后一个节点和倒数第二个节点,把最后一个节点设为头结点的后继(2)、翻转这个节点(3)、倒数第3个及倒数第4个节点重复执行步骤2注意:更改指针过程中要把改后的节点后继改为NULL2、非递归的方法翻转单链表(1)、声明两个节点指针preNode和nextNode,刚开始都设为NULL(2)、在L指针不断遍历单链表的过程中,preNode指向L指针的前驱,nextNode指向L指针的后继(3)、最后返回pre原创 2015-03-07 19:09:26 · 575 阅读 · 0 评论 -
Dijkstra算法
Dijkstra算法(迪杰斯特拉算法)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。(迪杰斯特拉算法-百度百科)Dijkstra算法运行动画过程源代码#include #include原创 2015-11-18 18:13:44 · 805 阅读 · 0 评论