
数据结构
浪阳
这个作者很懒,什么都没留下…
展开
-
拓扑排序
① AOV网:活动在顶点的网(Activity On Vertex network),表示工程间关系的有向图,顶点代表活动,有向边表示活动间的优先关系,要求AOV不能出现回路。检测是否有回路可使用拓扑排序,若最终有点没有被输出,则表明存在回路。 ② 拓扑排序步骤:(1)选入度为0的点输出;(2)删除该点及出度的边;循环(1)(2)至所有点全部输出 示例如下: 输出为 6 1 4原创 2016-02-21 12:05:51 · 294 阅读 · 0 评论 -
最小生成树-普里姆方法(Prim)
生成树:保留一部分的边,使图连通但无回路。 普里姆方法(Prim)步骤: (1) 找最小边,及两个顶点为最初的树 (2) 与树相接的边中取权值最小的一条边 (3) 将边及相应顶点并入树 循环(2) (3)可得到最小生成树。 示例如下: C代码如下: void Prim(MGraph g,int v, int &sum) { //lowcost记录原创 2016-02-21 12:38:44 · 542 阅读 · 0 评论 -
堆排序
堆是一种经过排序的完全二叉树。大根堆:双亲结点的值大于等于其孩子结点的值,根结点(堆顶)为最大;小根堆则相反。下面以大根堆为例进行说明。 堆排序步骤: (1) 建堆:从最后一个非终端结点开始,依次退到前一个结点直至堆顶。每趟以其为根结点,比较其和左右孩子的大小,若不是最大的,则将最大的孩子与根结点交换,并以被交换的孩子结点的位置作为根结点向下递归。 (2) 堆顶换出并调整:将堆顶和当原创 2016-02-22 14:08:12 · 417 阅读 · 0 评论 -
二叉树的还原
通过先序和中序,或者中序和后序的结果,可以还原一颗二叉树。中序为必要的,先序和后序有一个即可。 步骤为: (1)确定根结点:先序第一个,或后序最后一个为根结点; (2)确定左右子树:在中序的根节点左边的为左子树序列,右边的为右子树序列; (3)确定左右子树中的孩子结点:其孩子为先序中先出现的,或后序中后出现的; 循环(2)(3)即可完成。 例: 先序为:1,2,4,5原创 2016-02-24 15:17:37 · 791 阅读 · 1 评论 -
最小生成树-克鲁斯卡尔方法(Kruskal)-C语言实现
克鲁斯卡尔方法(Kruskal):不断将最小的但不会构成回路的边并入树。 示例如下: 判断是否构成回路要用到并查集,并查集可快速查找要并入的边与当前的树是否为同一集合(是否在同一棵树中),若为同一集合(在同一棵树中)则会构成回路。 并查集的实现方式为:并查集v[a]用来存放a的双亲结点,当a ==v[a]时为根节点,可通过语句"while(a != v[a]) a原创 2016-02-21 12:56:12 · 2517 阅读 · 2 评论