
数据结构
文章平均质量分 55
adlics_r
这个作者很懒,什么都没留下…
展开
-
C语言概述和数据类型
C语言概述和数据类型原创 2016-07-11 10:18:46 · 448 阅读 · 0 评论 -
Kruskal算法
问题描述 设G=(V,E)是无向连通带权图,如果G的一个子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树的各边权的总和称为该生成树的耗费,求在G的所有生成树中耗费最小的最小生成树。 算法思想 (1)将代价树中权值非0的所有的边进行小顶堆排序,依次存入到road[]数组中,然后将road[]进行倒置,注意在进行排序时,按照road[i]的权值进行排序,然后记录这条边的起始顶点也要原创 2016-12-04 22:33:16 · 750 阅读 · 0 评论 -
最短路径——迪杰斯特拉算法
概述 用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 算法 按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的集合(初始时只含有源点V0) (2)V-S=T:尚未确定的顶点集合 将T中顶点按递增的次序加入到S中,保证:转载 2016-12-05 22:18:29 · 728 阅读 · 0 评论 -
最短路径——Floyd算法
概述 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 核心思路 路径矩阵 通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。 从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的原创 2016-12-06 21:09:54 · 665 阅读 · 0 评论 -
线索二叉树
概念这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 注意: 线索链表解决了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题,出现了二叉链表找左、右孩子困难的问题。线索二叉树结构二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结转载 2016-12-13 23:35:03 · 591 阅读 · 0 评论 -
拓扑排序
转载http://www.cnblogs.com/dolphin0520/archive/2011/04/16/2017737.html 概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topo转载 2016-12-07 21:47:45 · 234 阅读 · 0 评论 -
关键路径
AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。 AOE网的性质: ⑴ 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始; ⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。 关键路径:转载 2016-12-08 23:19:27 · 446 阅读 · 1 评论 -
二叉树
基本概念 二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: (1)空二叉树 (2)只有一个根结点的二叉树; (3)只有左子树; (4)只有右子树; (5)完全二叉树。 注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。 类型 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点原创 2016-12-09 21:47:13 · 124 阅读 · 0 评论 -
赫夫曼编码
定理在变字长编码中,如果码字长度严格按照对应符号出现的概率大小逆序排列,则其平 均码字长度为最小。 现在通过一个实例来说明上述定理的实现过程。设将信源符号按出现的概率大小顺序排列为 : U: ( a1 a2 a3 a4 a5 a6 a7 ) [1] 0.20 0.19 0.18 0.17 0.15 0.10 0.01 给概率最小的两个符号a6与a7分别指定为“1”与“0”,然后将它们的概率原创 2016-12-15 22:59:48 · 491 阅读 · 0 评论 -
简答题——heap和stack的区别
Heap和Stack的区别? 1.heap是堆,stack是栈。 2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。 3.stack空间有限,heap的空间是很大的自由区。在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。原创 2016-12-24 20:59:28 · 522 阅读 · 0 评论 -
基本数据结构:树(tree)
无论是链表,栈还是队列,它们都是线性结构的,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用。这里我要说一种非线性的数据结构,其大部分操作的运行时间平均为O(logn)。我们涉及到的这种数据结构叫做树。在计算机科学中,树是非常有用的抽象概念。我们形象的去描述一棵树,一个家族的老祖可能有两个儿子,这两个儿子一个有一个儿子,一个有三个儿子,像这样发展下去原创 2016-11-21 20:02:44 · 601 阅读 · 0 评论 -
prime算法
prime算法的基本思想1.清空生成树,任取一个顶点加入生成树2.在那些一个端点在生成树里,另一个端点不在生成树里的边中,选取一条权最小的边,将它和另一个端点加进生成树3.重复步骤2,直到所有的顶点都进入了生成树为止,此时的生成树就是最小生成树int prime(int cur){ int index; int sum = 0; memset(visit, false, s原创 2016-12-03 20:10:12 · 691 阅读 · 0 评论 -
哈夫曼树
基本术语 哈夫曼树(霍夫曼树)又称为最优树. 1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。 2、结点的权及带权路径长度 若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的原创 2016-12-14 21:12:54 · 565 阅读 · 0 评论 -
Linux下的目录及其操作命令(五、改变文件或目录存取权限的命令)
使用文件命令对文件进行操作的前提是拥有相应的权限1.用户和权限1)文件主 Linux为文件都分配一个文件所有者,称为文件主,并赋予文件主唯一的注册名。对文件的控制取决于文件主或超级用户。 文件或目录的创建者对创建的文件或目录拥有特别使用权。 利用chown命令可以更改某个或目录的所有权。2)用户组 当系统管理员为用户建立账号之后,会分配一个组ID和一个特定的用户组命令。3)存取权限 Lin原创 2016-10-09 21:30:54 · 446 阅读 · 0 评论 -
线性表和链表的区别
线性表,和链表。线性表在内存中是一块连续的存储空间;如:一个表中的内容是:【1,2,3】则它在内存中可能是如下存储的:123通过这个结构可以看出,只要知道了第一个元素在内存中所在的位置。就可以很容易的知道其他元素的位置。因为每一个元素占的空间是一样的。所以,如果我们知道第一个元素:1在内存号:1000;而每一个元素占8个内存空间;则第二个元素:2所在的内存空间为:1000 + 8;依此类推。所以,在转载 2016-11-09 16:51:27 · 346 阅读 · 0 评论 -
数据结构(算法的时间复杂度和空间复杂度)
时间复杂度 时间复杂度和空间复杂度是算法效率的度量方法。也就是说,一个好的算法取决于它的时间复杂度和空间复杂度。 函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大。那么,我们说f(n)的增长渐近快于g(n)。 翻译过来就是:如果存在一个临界值,使得f(n)>g(n)永远成立,那么我们就认为”f(n)的增长渐近快于g(n)”。定义转载 2016-10-28 22:47:32 · 488 阅读 · 0 评论 -
数据结构之图的定义与术语
图:由有穷、非空点集和边集合组成,简写成G(V,E); Vertex:图中的顶点;无向图:图中每条边都没有方向; 有向图:图中每条边都有方向;无向边:边是没有方向的,写为(a,b) 有向边:边是有方向的,写为 <a,b> 有向边也成为弧;开始顶点称为弧尾,结束顶点称为弧头;简单图:不存在指向自己的边、不存在两条重复的边的图;无向完全图:每个顶点之间都有一条边的无向图; 有向完全图:每个顶原创 2016-11-29 22:17:56 · 652 阅读 · 0 评论 -
图的存储结构
图的存储结构相比较线性表与树来说就复杂很多。 对于线性表来说,是一对一的关系,所以用数组或者链表均可简单存放。树结构是一对多的关系,所以我们要将数组和链表的特性结合在一起才能更好的存放。 图,是多对多的情况,另外图上的任何一个顶点都可以被看作是第一个顶点,任一顶点的邻接点之间也不存在次序关系。因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理原创 2016-11-30 22:07:01 · 358 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 一.前序遍历 前序遍转载 2016-12-10 22:22:31 · 270 阅读 · 0 评论 -
二叉树的顺序存储
【出处】http://book.51cto.com/art/200907/134251.htm 3.2.2 二叉树的顺序存储结构和链式存储结构(1)二叉树的顺序存储结构按照顺序存储结构的定义,用一组地址连续的存储单元以此自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。对于一般二叉树,则应将其每个结点与完全二叉树上的结转载 2016-12-11 20:47:03 · 1192 阅读 · 1 评论 -
图的遍历
图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的其它算法如求解图的连通性问题,拓扑排序,求关键路径等都是建立在遍历算法的基础之上。由于图结构本身的复杂性,所以图的遍历操作也较复杂,主要表现在以下四个方面: ① 在图结构中,没有一个“自然”的首结点,图中任意一个顶点都可作为第一个被访问的结点。 ② 在非连通原创 2016-12-01 21:52:52 · 894 阅读 · 0 评论 -
最小生成树概念及性质
概念 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得 的 w(T原创 2016-12-02 23:03:53 · 3858 阅读 · 0 评论 -
简答题——栈和队列的区别
栈和队列的区别? 1.队列先进先出,栈先进后出。 2. 对插入和删除操作的”限定”。 栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。 3.栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按”后进先出”的规则进行操作,而队列必须按”先进先出” 的规则进行操作。原创 2016-12-27 21:10:31 · 1830 阅读 · 0 评论