数据结构
文章平均质量分 65
从所周知,数据结构,就是数据结构!!!
ybbgrain
这个人很懒,什么也没有写。。。
展开
-
10分钟了解数据结构(严蔚敏&王道版)
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述本文使用正常人的语序来总结,数据结构的大部分知识点,概念。书本上的反人类话语就不出现了。诸如:算法的特征,评价算法的优劣标准,非终端节点等常用的概念性,需要理解记忆的总结。第一章 基本概念数据结构:是研究数据的组织,存储,和运算的一般方法。数据:客观表示事物的符号表示。数据元素:数据的基本单位,数据元素用于描述一个完整的对象。数据对象:集合内数据元素的性质相等,就可以称之为数据对象。抽象数据类型原创 2021-09-24 17:32:10 · 1855 阅读 · 0 评论 -
数据结构目录树(严蔚敏&王道)版
概述为了使计算机组成原理的相关知识,连贯起来,更方便查找理解,制作学习操作系统的目录。目录第一章 XXX第二章 XXX2.1XX2.1.1--------2.1.2--------原创 2021-09-18 09:16:48 · 2304 阅读 · 0 评论 -
弗洛伊德算法Floyd
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述Floyd算法是什么?Floyd算法也是动态规划的求最短路径,但不同于Dijkstra算法,Floyd算法可以求权值为负的边,其主要代码的思想是三层for循环,所以时间复杂度为O()。...原创 2021-10-12 11:36:27 · 874 阅读 · 0 评论 -
深度,广度,Prim,Kruskal算法(C语言实现)
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述代码主要是包含:图的创建 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法算法代码#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#define MAX 100 // 矩阵最大容量.原创 2021-10-11 10:09:38 · 222 阅读 · 0 评论 -
Prim算法
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。目录概述算法过程算法代码参考概述Prim算法是什么?Prim算法也是求最小生成树的算法,不同于Kruskal算法,Prim算法相较于在Kruskal算法的直接全局选择最小权值,Prim算法只选择,当前连成结点能够连接到的结点。算法过程可以看见如果第二部,是Dijkstra算法的话就会选择D-F连接,而Pim算法则是选择C-F连接,这就是这两种最小生成树算法的区别。算法代码/* * ..原创 2021-10-11 10:04:39 · 401 阅读 · 0 评论 -
Kruskal算法
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述Kruskal算法是什么?Kruskal算法是求最小生成树的一种算法,也是一种朴素算法,这种算法就是,在所有的结点当中,每次选择未被连接的权值最小的边。那么最小生成树又是什么呢?连通的,最小权值的图,就称为最小生成树。算法的过程Kruskal算法又称为加边法,就是把最短的边,一条条加起来生成的树。算法代码/* * 克鲁斯卡尔(Kruskal)最小生成树 */void kruskal.原创 2021-10-11 09:54:35 · 602 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra)算法
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。目录概述算法过程总结概述什么是Dijkstra?Dijkstra算法是朴素算法,朴素是体现在其算法思想上。每一次都,从可以到达的边当中,选择最短的一条边,以此连接整个图,达到寻求最短路径的效果。算法过程如下图,第一次从源点出发,能够到达的顶点只有1,2,3那么到这3个顶点的路径中,选择最小的一个,进行连接,以此类推。这之中就不得不介绍一个dist数组了。这也是Dijkstra算法的核心,而dis原创 2021-10-09 15:42:38 · 1537 阅读 · 0 评论 -
关键路径,最早,最迟发生时间的理解
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述图的关键路径是什么,有什么用?图的关键路径,是拓扑序列的一条,可用理解为用来计算最优,或最差拓扑序列,用来预估走完整个图的拓扑序列,需要的最短时间最多时间。概念AOE网:一个带权的有向图中,顶点表示事件,边表示活动,权值表示活动持续的时间,称这样的图为AOE网。源点:在AOE网中,没有入边的顶点称为源点。终点:在AOE网中,没有出边的顶点称为终点。AOE网的性质: 只有在进入事件...原创 2021-09-30 18:10:05 · 7906 阅读 · 4 评论 -
图的遍历(深度优先,广度优先)
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。目录概述深度优先遍历(过程)深度优先遍历(代码)广度优先遍历(过程)广度优先遍历(代码)概述深度优先遍历和广度优先遍历是什么?怎么遍历?深度优先遍历顾名思义就是,每一次要访问得深,即每一次都要访问到最底层的叶子节点。广度优先遍历,就是每一次,都要以层数为优先,一次就要访问完一层的顶点。深度优先遍历-->先序遍历,广度优先遍历-->层级遍历。深度优先遍历(过程)方法:从某个顶点原创 2021-09-30 16:38:18 · 648 阅读 · 0 评论 -
图的基本概念
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述什么是图,图的基本概念有那些?树是图的一种特殊形式,图可以理解为不规范且任意相连的树就是图。图的基本概念:如图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G表示图G中顶点之间的关系)。表可以为空,树可以为空,图至少有一个顶点。(跟树类比,一个结点都没的树,还叫树吗?)概念不少,后续也会介绍,前面只是开个头。图的概念表示方式例如图...原创 2021-09-29 11:43:12 · 466 阅读 · 0 评论 -
树,森林,二叉树的转换
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。目录概述树转化为二叉树森林转化为树二叉树转化为树二叉树转换为森林概述森林,树,二叉树之间要怎么转换?这三种本质上还是树,所以这几种之间的转化,都是通过加线去线的方式实现的。树转化为二叉树树转化为二叉树,大概分为以下三个步骤:加线,在所有兄弟结点之间加一条线。去线,树中的每个结点,只保留他与第一个孩子结点的连线,删除它与其他孩子结点的连线。层次调整,树调整为正常层次类型的树,方便...原创 2021-09-28 11:40:01 · 310 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述什么是哈夫曼树呢?哈夫曼树,又称为最优二叉树。给定n个权值作为n个叶子节点,构造一颗二叉树,若树的带权路径长度达到最小,则这棵树称为哈夫曼树。简易理解:带权路径长度(WPL)最小的树就是哈夫曼树,WPL=所有叶子节点的权值*路径长度。基本概念路径长度:经过一个结点,路径长度就要+1,下图根节点到c的路径长度为3。权值:每个结点都有一个权值(通常情况下,为了统一哈夫曼树,左边通常是小的权值结点)。WP原创 2021-09-27 18:55:09 · 430 阅读 · 0 评论 -
平衡二叉搜索树
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。目录概述旋转的介绍左单旋转右单旋转左右双旋代码逻辑结点的创建左单旋右单旋完整代码概述什么是平衡二叉搜索树?首先需要了解一下什么是二叉搜索树?左子树都小于根节点,右子树都大于根节点,这样的树就是二叉搜索树。平衡二叉搜索树就是,不仅要是二叉搜索树,还要是平衡的。每个节点都有一个平衡因子,平衡因子为-1,0,1(平衡因子 = 右子树的高度-左子树的高度)的就是平衡二叉搜索树。要.原创 2021-09-27 11:37:00 · 494 阅读 · 0 评论 -
线索二叉树详细解释
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述什么是线索二叉树?为了区分二叉树的左孩子指针,和右孩子指针是否为空,为结点增加了2个域,这两个域分别是Ltag和Rtag。这样的二叉树,就是线索二叉树。需要了解的概念如果结点有左孩子:那么Lchild指向他的左孩子,否则指向遍历序列中他的前驱结点。如果结点有右孩子:那么Rchild依然指向他的左孩子,否则指向遍历序列的后继节点。Ltag=0:表示Lchild指向结点的左孩子。Ltag=1:表示Lc.原创 2021-09-26 14:53:35 · 2252 阅读 · 0 评论 -
ADT(抽象数据类型)
目录概述抽象数据类型的出现抽象数据类型总结概述什么是ADT?ADT全称(Abstract Data Type)是指数学模型以及定义在数学模型上的一组操作,抽象数据类型需要通过,固有的数据类型(高级编程中实现的数据类型)。对一个抽象数据类型进行定义时,必须给出他的名字及各运算的运算符名,即函数名。并且规定这些函数的参数性质。我不知道你们看懂了吗?反正我是没看懂,下面我们来了解一下,通俗的理解方式。抽象数据类型的出现最初,计算机当中数据对象都是用二进制来表示,为了提高原创 2021-09-23 17:17:20 · 2691 阅读 · 0 评论 -
摩尔质量的计算
概述这是一道算法题。题目是:给一串分子式,求它的相对分子质量只含C,H,O,NC=12.01 g/molH=1.008 g/molO=16.00 g/molN=14.01 g/mol例如:输入CC2C2H2c2h3o5n6输出12.0124.0226.036191.104分析首先需要分析一下这个问题。在计算摩尔质量的时候,主要是挨个扫描,找到对应的质量,累加,当遇到数字的时候,需要累乘。那么可以得到如下编码步骤:定义一个输入.原创 2021-09-22 15:27:30 · 1502 阅读 · 0 评论 -
红黑树过程的理解
全知识整理目录数据结构整理的目录包括了许多的数据结构相关知识。概述红黑树是什么呢?红黑树是一种自平衡二叉搜索树,什么是二叉搜索树,目录当中也有提及。满足以下几个特点的,就叫做红黑树:根节点必须是black。 red的节点的叶节点只能是black。 每个叶节点都是black。 对于任意节点,其到叶节点树尾端NIL指针,的每条路径都包含相同数目的black节点。这就使得,一颗n个节点的红黑树,始终保持着logn的高度,从而达到了删除,添加,修改时最坏时间复杂度为O(logn原创 2021-09-18 17:20:57 · 198 阅读 · 0 评论 -
归并排序(过程理解)
概述归并的思想是:将多个已经有的序列合并成一个有序的序列。过程下面以2路归并排序示例。第一次排序后第二次排序后第三次 排序后总结类别 最好时间 最坏时间 平均时间 空间复杂度 稳定性 适用于 归并排序 nlogn nlogn nlogn n 稳定 分而治之 n个元素2路归并那个元素,要归并log2n趟。每趟需要归并的时间复杂度o(n),每合并两个序列要比较(m+n...原创 2021-09-02 17:38:37 · 271 阅读 · 0 评论 -
基数排序(过程理解)
概述基数排序的简单理解就是:排序数字最多的位数,有多少位,循环多少趟。第一趟比较个位,完成第一次排序。第二趟比较十位,完成第二次排序,依次比较完。需要记住的有唯一不基于比较的内排序 唯一时间复杂度在线性级别的内排序 稳定的排序 时间复杂度和初始排序的状态无关具体实现基本的思路,如概述当中所说。也如下图所示初始序列(下面将大到小排序)经过第一次排序。按个位排序经过第二次排序。按十位排序经过第三次排序。按百位排序至此,排序完成...原创 2021-09-02 15:58:58 · 583 阅读 · 0 评论 -
B树与B+树
概述B树就是平衡树(balancetree)B树与B+树的对比名称 B树(多路平衡查找树) B+树 示意图 原型 由二叉树演变而来的,m查找树 由分块查找演变而来的,多级分块查找 关键字 根节点关键字范围【1,m-1】 根节点关键字范围【2,m】 分支数 n个关键字对应,n+1个分支 n个关键字对应,n个分支 分支范围 根节点【2,m】,其他节点【m/2,m】 记录信息 所有节点都有 只有叶原创 2021-09-01 13:36:20 · 185 阅读 · 0 评论 -
链表的基本操作
概述链表是什么:每个节点通过指针相连。每个节点有一个前驱节点和一个后继节点(除首尾)。节点的构造typedef struct Node //typedef数据类型别名{ int data; //指针域 struct Node *next; //数据域}Node,*LNode //Node相当于struct node,*LNode相当于 struct node *创建链表LNode Create_List(){ int.原创 2021-08-31 10:38:13 · 232 阅读 · 0 评论 -
时间复杂度(初级理解)
题记初级理解就是,完成基本的时间复杂度的计算。复杂一点的时间复杂度,还是需要算一会的。常数阶O(1)这种没有循环的代码,无论多少行,时间复杂度都是O(1)int i = 0;++i;int m = i+m对阶数O(logN)i=i*2,i就会无线接近于n,直到i=>的时候,循环停止。设经过X次循环之后,i>n。所以得到表达式:2^X=n,就可以解出X=log2^n。nt i = 1;while(i<n){ i = i * 2.原创 2021-08-27 16:02:59 · 361 阅读 · 0 评论 -
堆排序的简单理解
首先堆的特点是:1. 是一个完全二叉树。2.所有父节点的值都要大于子节点。所以,堆排序是利用的完全二叉树的性质进行排序的。例如 5 2 9 4 3 8排序(大顶堆)首先5进来当根节点然后2进来然后9进来,因为9比5大,所以9跟5交换位置。然后4进来,4比2大,4跟2交换位置。然后 3进来然后8进来,8比5大,8跟5交换位置可以看见5依然比4大,但5跟4并不会交换位置,因为堆排序,其只看其父节点->父节点依此类推...原创 2021-08-05 10:21:06 · 191 阅读 · 0 评论 -
快速排序的理解
快速排序有2个要点。找一个关键字。 比关键字元素大的放在一边,比其小的放在另一边。下面举个例子详细解释。但是银行有VIP规则,不同的账户身份可以提前服务。那么怎么执行更高效呢?首先默认选择第一个金卡为关键元素。将金卡用户单独列出,那么这个位置空出来了,就需要人来填,后面找人来填补空位。进行排序,等级低于金卡的在左边,高于金卡的在右边。首先从high指针开始向前扫描,遇见银卡,发现档次低于金卡,那么就放在金卡最开始空出来的位置。如下图:但是银卡的位置(最后一个又空出来了原创 2021-02-08 11:55:21 · 202 阅读 · 1 评论 -
关键路径的计算
我们以一道19年的408考研真题为例子。先列表计算:1.因为到ac都没有间隔,可以直接到达,所以直接写。而到b则需要经过c(选择最长的路径),所以b为8。 a b c d e f g h e(i) 0 8 0 l(i) 2.后续到d(最长路径)12 a ...原创 2020-09-24 10:16:52 · 4743 阅读 · 0 评论 -
KMP算法计算next和nextval
1.KMP。例如:ababa(求next数组值)从0开始ab(默认0,1)然后看最大匹配长度,也就是相同字符的最大匹配的长度(例如abab:最大匹配长度就是2(ab:ab))还没有理解看看下图(最大匹配长度为3的next数组值)所以next数组值分别为(0,1,1,2,3)2.KMP算法的改进(主要是因为回溯得过多,造成不必要的时间开销了)改进了就增加了一个nextval值nextval第一个和第二个值照写1. a的next值为1他就回到第一个位置处,而第..原创 2020-09-21 20:55:46 · 7302 阅读 · 2 评论