数据结构
黑夜之星
这个作者很懒,什么都没留下…
展开
-
栈:栈、队列基本概念
栈:先进后出,栈是一种只能在一端进行插入和删除操作的特殊线性表。 栈的存储结构:顺序存储:在内存中分配一个数组空间,注意在顺序栈中有”上溢”(栈满)和”下溢”(栈空)的概念,所以每次操作时要先判断满栈或空栈。链式存储:控制入栈出栈的端口,栈顶一般是链表的头,第一个节点,栈底一般是最后一个节点。(可以避免顺序存储的溢出),同时节省空间,要多少,申请多少。链表的运用中同时要注意一旦申请了,最后要记原创 2017-07-07 17:26:53 · 651 阅读 · 0 评论 -
查找:哈希表
概念哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 —存储位置 = f(关键字),其中f为哈希函数。优点:就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间(时间复杂度:О(1));而代价仅仅是原创 2017-08-07 00:52:40 · 587 阅读 · 0 评论 -
查找:静态查找表
静态查找表在查找的过程中不改变表的状态——不插不删。他适合用于不变动或不常变动的表的查 找。如高考成绩表、本单位职工信息表等。原创 2017-07-27 15:27:47 · 1122 阅读 · 0 评论 -
图:求图的最短路径
最短路径:一个节点到其他所有节点的最短路径。 Dijkstra(迪杰斯特拉)算法:是典型的最短路径路由算法。它能得出最短路径的最优解,主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。但由于它遍历计算的节点很多,所以效率低。算法描述算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路原创 2017-07-21 15:41:41 · 1250 阅读 · 0 评论 -
查找:B+树
B+-treeB+树:是应文件系统所需而产生的一种B-tree的变形树,通常用于数据库和操作系统的文件系统中。为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?B+-tree的磁盘读写代价更低B+-tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入原创 2017-08-03 17:17:31 · 1609 阅读 · 0 评论 -
查找:基本概念
概述:从内存中提取数值经常要比复杂的计算速度快很多,所以这样得到的速度提升是很显著的。举个例子:一个经典的例子就是三角表。每次计算所需的正弦值在一些应用中可能会慢得无法忍受,为了避免这种情况,程序可以在刚开始的一段时间计算一定数量的角度的正弦值,然后保存在表中,当需要使用的时候直接从表中查找而不是再重新计算。另外需要注意的一个问题是,尽管查找表经常效率很高,但是如果所替换的计算相当简单的话就会得不偿原创 2017-07-24 11:30:56 · 426 阅读 · 0 评论 -
查找:B-树
前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。咱们有一个实际问题:就是大规原创 2017-08-02 16:18:35 · 947 阅读 · 0 评论 -
树:二叉树几种形态(满二叉,完全二叉,线索二叉,二叉排序,平衡二叉,哈夫曼)
二叉树的几种形态 (1) 在二叉树中,第i层的结点总数不超过2i−12^{i-1} (2) 深度为h的二叉树最多有2h−12^{h}-1个结点(h>=1),最少有h个结点; (3)具有n个结点的完全二叉树的深度为 h=log2(n+1)h = log_2({n+1}) 例如:树的最大层次就是深度,比如上图,深度是4。很容易得出,深度为k的树,拥有的最大结点数是 log2(n+1)log原创 2017-06-30 15:43:16 · 4378 阅读 · 0 评论 -
查表:字符串模式匹配(BF、KMP算法)
字符串模式匹配(BF、KMP算法)KMP算法(看毛片算法),是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法(反正这个看毛片算法就是一个很高效很屌的匹配算法)。但是相较于其他模式匹配算法,该算法晦涩难懂(比较坑爹),第一次接触该算法的人往往会一脸懵逼,主要原因是KMP算法在构造原创 2017-07-27 23:18:39 · 655 阅读 · 0 评论 -
图:求关键路径
一:概念:在学习关键路径前,先了解一个AOV网和AOE网的概念:如下图所示 假如汽车生产工厂要制造一辆汽车,制造过程的大概事件和活动时间如上图AOE网: 那么,显然对上图AOE网而言,所谓关键路径:开始–>发动机完成–>部件集中到位–>组装完成。路径长度为5.5。如果我们试图缩短整个工期,去改进轮子的生产效率,哪怕改动0.1也是无益的。只有缩短关键路径上的关键活动时间才可以减少整个工期的长度原创 2017-07-19 16:34:56 · 6698 阅读 · 3 评论 -
图:图的应用(最小生成树、拓扑排序、关键路径)
一:求最小生成树应用场景:例如要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。普里姆算法:该算法的核心就是依次增大连通图的过程:首先任意选择一个节点,作为一个连通图然后找到与该连通图相邻的一个节点(权值最小),连接重复上述步骤,知道包含原创 2017-07-17 15:15:15 · 2304 阅读 · 1 评论 -
图:图的遍历(深度优先遍历、广度优先遍历)
和树的遍历类似,在此,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(TraversingGraph)。如果只访问图的顶点而不关注边的信息,那么图的遍历十分简单,使用一个foreach语句遍历存放顶点信息的数组即可。但如果为了实现特定算法,就需要根据边的信息按照一定顺序进行遍历。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。 图转载 2017-07-17 10:35:58 · 2545 阅读 · 0 评论 -
树:二叉树的集中遍历方法(先序,中序,后序遍历,线索二叉树)
一:二叉树的集中遍历方法1:先序遍历根→左→右 先访问根节点,再遍历左子树,最后遍历右子树;并且在遍历左右子树时,仍需先访问根节点,然后遍历左子树,最后遍历右子树。 比如上图,先序遍历的输出如下 : - + a * b - c d / e f根据上面的思想,很容易用递归的形式写出先序遍历的代码://先序遍历 Status PreOrderTraverse(BiTree T , Statu原创 2017-06-29 11:25:31 · 1589 阅读 · 0 评论 -
树:哈夫曼树(最优二叉树)
1,概念哈夫曼树,英文名 Huffman Tree, 又称最优二叉树(程序运行效率最优解)。2,相关术语路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路径长度:路径上的分枝数目称作路径长度。 树的路径长度:从树根到每一个结点的路径长度之和。 结点的带权路径长度:路径 * 权重 = 结点的带权路径长度;在一棵树中,如果其结点上附带有一个权值(权重),通常把该结点的路径长原创 2017-06-30 17:12:48 · 2511 阅读 · 0 评论 -
图:图的基本概念
基本概念:图 (Graph):一种比较复杂的数据结构,其中的任何两个元素都可以有序偶关系。顶点:图中的数据元素。弧:如果图中顶点的关系用< v , w >表示,则< v , w >表示从顶点 v 到顶点 w 的一条弧,其中 v 是弧尾,w 是弧头。有向图:顶点的关系用弧表示的图称有向图。无向图:如果图中顶点的关系用(v , w)表示,则(v,w)表示从顶点 v 到顶点 w 的一条边,此时的原创 2017-07-13 14:18:06 · 943 阅读 · 0 评论 -
栈:矩阵的压缩存储
概念:科学与工程计算有一个特殊的数学对象,那就是矩阵。如何将矩阵中的各个元素存储在计算机中,数组就是一个很好的选择。我们通常会遇到三种类型的矩阵:普通矩阵特殊矩阵:对称矩阵、上三角矩阵、下三角矩阵、对角矩阵等稀疏矩阵特殊特殊矩阵和稀疏矩阵压缩存储的目的是节省存储空间。矩阵的下标是从1开始,而将改矩阵压缩成内存中的一维空间时,与该一维空间所对应的数组下标是从0开始。1. 对称矩阵:⎡⎣⎢⎢⎢⎢原创 2017-07-12 09:13:18 · 770 阅读 · 0 评论 -
树:树、森林、二叉树的转换
三者直接的转换:树⟺\iff二叉树⟺\iff森林一:树变二叉树概述:每个结点的左指针指向它的第一个孩子结点。右指针指向它在树中的相邻兄弟结点。 也即:左孩子右兄弟。根没有兄弟,所以转换以后的树没有右子树。步骤:在兄弟之间连线对每一个结点,只保持它与第一个子结点(长子)的连线,与其他子结点的连线全部抹去。以树根为轴心,顺时针旋转45度。 二:二叉树变树概述:是树变二叉树的逆过程。问:二叉树可以原创 2017-07-03 11:09:08 · 658 阅读 · 0 评论 -
树:树、二叉树、森林基本定义
树和二叉树的区别:1)树中结点的最大度数没有限制,而二叉树结点的最大度数为2; 2)树的结点无左、右之分,而二叉树的结点有左、右之分。二叉树,树,森林之前遍历对比: 二叉树 树 森林 先序遍历 先根遍历 先序遍历 中序遍历 后序遍历 后根遍历 中序遍历相关术语:树的结点:包含一个数据元素及若干指向子树的分支; 孩子结点:结点的子树的根称为该结点原创 2017-06-28 12:24:08 · 4983 阅读 · 2 评论 -
栈:中缀表达式转换成后缀表达式并求值
中缀表达式转换成后缀表达式并求值算法:中缀表达式转后缀表达式的方法: 1.遇到操作数:直接输出(添加到后缀表达式中) 2.栈为空时,遇到运算符,直接入栈 3.遇到左括号:将其入栈 4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。 5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈 6.最终将栈中的元素依次出原创 2017-06-24 15:29:27 · 1268 阅读 · 1 评论