数据结构
小达人Fighting
这个作者很懒,什么都没留下…
展开
-
内部排序 ---- 归并排序 、基数排序【按位依次排序】
1、归并排序 》》 “归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。 》》 案例:2-路归并排序 2、基数排序【按位依次排序】 》》基数排序分为:“最高位优先(MSD)”和 “最低位优先(LSD)”。 》》 基数排序的案例:【由 4个 3位数组成的表的过程】--》使用“最低位...原创 2019-10-25 17:45:07 · 362 阅读 · 0 评论 -
内部排序 ---- 选择排序 :堆排序(树形选择排序)--借助“完全二叉树顺序存储”
1、 》》堆排序是一种树形选择排序方法,它的特点是:在排序过程中,将 L[1...n]看成是一棵完全二叉树 的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关 键字最大(或最小)的元素。 》》堆的定义如下: n个关键字序列 L[1...n]称为“堆”,当且仅当该序列满足:...原创 2019-10-25 11:48:05 · 533 阅读 · 0 评论 -
内部排序 -- 选择排序:简单选择排序
》》选择排序的基本思想:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已经排好序的 子表(有序序列)的最后,直到全部记录排序完毕。 1、简单选择排序图解: 1)、将一段序列分为“有序序列”和“无序序列”两个部分。 说明1:每次都从“无序序列”中找出...原创 2019-10-25 10:44:28 · 180 阅读 · 0 评论 -
内部排序 --交换排序:冒泡排序 快速排序
》》所谓交换,就是根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。1、冒泡排序 》》冒泡排序算法的基本思想是:假设待排序表长为n ,从后往前(或者从前往后)两两比较 相邻元素的值,若为逆序(即 A[ i-1 ] > A[ i ]),则交换它们,直到序列比较完。执行这样的一次 操作称为“一趟冒泡”。 ...原创 2019-10-24 13:31:40 · 172 阅读 · 0 评论 -
内部排序 ----》插入排序:查找待插入位置 + 移动待插入位置之后的元素 + 插入数据
》》插入排序是一种简单直观的排序方法,其基本思想在于每次将一个待排序的记录,按其关键字 大小插入到前面已经排好序的子序列中,直到全部记录插入完成。1、直接插入排序 》》直接插入排序进行的两项工作: 1)、从前面有序的子表中查找出待插入元素应该被插入的位置 2)、给插入位置腾出空间,将待插入元素...原创 2019-10-22 22:45:02 · 388 阅读 · 0 评论 -
排序的定义
1、 》》排序:就是重新排序列表中的元素,使表中的元素满足按关键字递增或递减的过程。为了 查找方便,通常要求计算机中的表是按关键字有序的。 》》算法的稳定性:如果待排序表中有两个元素 A和 B ,其对应的关键字 A1 = B1 ,且在排序前 A在 B的前面,如果使用某一个算法排序后,A仍然在 B的前面,则称这个排序算法是稳定的...原创 2019-10-19 16:25:43 · 268 阅读 · 0 评论 -
字符串模式匹配 ---- 简单的模式匹配算法
1、简单的模式匹配算法 》》串的模式匹配,是求第一个字符串(模式串)在第二个字符串(主串)中的位置。 》》一种简单的模式匹配算法:从主串 S指定的字符开始(一般为第一个)和模式串 T的第一个字符比较, 若相等,则继续逐个比较后续字符,直到 T中的每个字符依次和 S中的一个连续的字符序列相等,则 称匹配成功;如果比...原创 2019-10-19 16:07:18 · 1867 阅读 · 0 评论 -
散列(hash) 表
1、 》》散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为 Hash(key)=Addr , ###散列函数可能会把两个或者两个以上的不同关键字映射到同一地址,称这种情况为“冲突”, 这些发生碰撞的不同关键字称为同义词。 ###一方面好的散列函数应尽量减少冲突的出现;另一方...原创 2019-10-19 11:15:10 · 473 阅读 · 0 评论 -
B+树的基本概念
1、 》》 B+树是应数据库所需而出现的一种 B树的变形树。 》》一棵m阶的 B+树需要满足下列条件: 1)、每个分支结点最多有m棵子树(子结点) 2)、非叶根结点至少有两棵子树,其他每个分支结点至少有棵子树 3)、结点的子树个数与关键字个数相等 4)、所有叶结点...原创 2019-10-16 20:31:25 · 2104 阅读 · 0 评论 -
B树及其基本操作
1、 》》 B树,又称为“多路平衡查找树 ” , B树中所有结点的孩子结点数的最大值称为 B树的阶, 通常用m表示。 》》一棵m阶B树或为空树,或为满足如下特性的m叉树: 1)、树中每个结点至多有m棵子树(即至多含有 m-1个关键字) 2)、若根结点不是终端结点,则至少有两棵子树 ...原创 2019-10-16 19:30:04 · 980 阅读 · 0 评论 -
分块查找(索引顺序查找)
1、 》》分块查找,又称为“索引顺序查找 ” ,吸取了“ 顺序查找 ”和 “ 折半查找 ”各自的优点,既有 动态结构,又适合于快速查找。 》》分块查找的基本思想:将查找表分为若干个子块。块内的元素可以无序,但是块之间是有序的, 即第一个块中的最大关键字小于第二个块中的所有记录的关键字,第二个块中的最大关键字小于 第三...原创 2019-10-16 12:49:48 · 1968 阅读 · 0 评论 -
折半查找(二分查找)
1、 》》折半查找,又称为“二分查找 ” ,它仅适用于 “有序的顺序表” 。 》》基本思想:首先将给定值 key与表中中间位置元素的关键字比较,若相等,则查找成功,返回该 元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分中 (例如,在查找表升序排列时,若给定值 key大于中间元素的关键字,则所...原创 2019-10-16 12:22:50 · 399 阅读 · 0 评论 -
顺序查找
1、一般线性表的顺序查找 》》基本思想:从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到 某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置; 若已经查找到表的另一端,还没有查找到符合给定条件的元素,则返回查找失败 的信息。 》》下面的简单的...原创 2019-10-16 11:21:49 · 8076 阅读 · 0 评论 -
查找的基本概念
1、 》》查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。 》》查找的结果一般分为两种:查找成功,即在数据集合中找到了满足条件的数据元素; 查找失败 》》查找表(查找结构):用于查找的数据集合称为查找表,它由同一类型的数据元素 (...原创 2019-10-16 09:29:49 · 1359 阅读 · 0 评论 -
图的应用 --- 关键路径
1、 》》在带权有向图中,以顶点表示事件,有向边表示活动,边上的权值表示完成该活动的开销, 则称这种有向图为用边表示活动的网络,简称为 AOE网。 》》 AOE网具有以下两种性质: 1)、只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表活动才能开始 2)、只有在进入某一顶点...原创 2019-10-13 21:42:22 · 804 阅读 · 0 评论 -
图的应用 ---- 拓扑排序【有向无环图的顶点组成的序列】
1、 》》有向无环图【DAG图】:一个有向图中不存在环,则称为有向无环图。 》》 AOV网:如果用 DAG图表示一个工程,其顶点表示活动,用有向边 < Vi , Vj > 表示活动 Vi必须先于活动 Vj进行,将这个种有向图称为顶点表示活动的 网络,记为 AOV网。 在 AOV 网...原创 2019-10-13 21:11:51 · 487 阅读 · 0 评论 -
图的应用 ---- 最短路径
1、 》》广度优先搜索查找最短路径只是对无权图而言的,若图是带权图,则把从一个顶点 V0到图中 其余任一个顶点 Vi的一条路径(可能不止一条)上所经过边上的权值之和定义为该路径的带权 路径长度,把带权路径长度最短的那条路径称作最短路径。 》》求解最短路径的算法通常都依赖于一种性质:两点之间的最短路径也包含了路径上其他顶点间 ...原创 2019-10-13 20:46:12 · 521 阅读 · 0 评论 -
图的应用 ---- 最小生成树(Minimum-Spanning-Tree,MST)--- prim + Kruskal
1、 》》一个连通图的生成树:图的极小连通图,它包含图中的所有顶点,并且只含尽可能少的边。 这意味着对于生成树来说,若砍去边的一条边,就会使生成树变成非连通图;若给它增加一条边, 就会形成图中的一条回路。 》》对于一个带权连通无向图 G = ( V , E ) ,生成树不同,每棵树的权(即树中所有边上的权值 ...原创 2019-10-13 17:06:54 · 407 阅读 · 0 评论 -
图的遍历 --- 广度优先搜索【借助队列实现】 + 深度优先搜索【借助递归栈】
1、 》》图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问 一次且仅访问一次。 注意:树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历。 》》 图的遍历是图的一种最基本的操作,其他许多操作都是建立在图的遍历操作基础之上。 》》图的遍历主要有两种算法:广度优先搜...原创 2019-10-09 16:24:22 · 5547 阅读 · 2 评论 -
图的存储及基本操作 ---- 邻接多重表【无向图的一种链式存储结构】
1、 》》邻接多重表是无向图的另一种链式存储结构。 》》 在邻接表中,容易求得顶点和边的各种信息,但在邻接表中求两个顶点之间是否存在边,或者 需要对边执行删除等操作时,需要分别在两个顶点的边表中遍历,效率较低。 》》在邻接多重表中,每一条边用一个结点表示,其结构如下图: 说明1: 边的结点 ...原创 2019-10-09 11:34:09 · 1257 阅读 · 0 评论 -
图的存储及基本操作 ---- 十字链表【有向图的一种链式存储结构】
1、 》》十字链表是有向图的一种链式存储结构。在十字链表中,对应于有向图中的每条弧 有一个结点,对应于每个顶点也有一个结点。这些结点的结构如下: 说明1:弧结点 a.尾域 tailvex :指示弧尾在图中的位置 b....原创 2019-10-09 10:54:50 · 1385 阅读 · 0 评论 -
特殊矩阵和压缩存储--------使用数组存储矩阵中的元素
矩阵在计算机图形学、工程计算中占有举足轻重的地位。在数据结构中考虑的是如何用最小的内存 空间来存储同样的一组数据。所以,不需要研究矩阵及其运算等,而把精力放在如何将矩阵更有效地存储 在内存中,并能方便地提取矩阵中的元素。----------数组的定义 数组是由 n ( n >= 1 ) 个相同类型的数据元素构成的有限序列,每个数据元素称为...原创 2018-07-31 19:49:35 · 1964 阅读 · 0 评论 -
队列
---------------队列的基本概念 1. 队列的定义 队列:队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端 进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。这和我们日常生活中的 排队是一致的,最早排队的也是最早...原创 2018-07-31 13:39:01 · 225 阅读 · 0 评论 -
栈
-----------栈的基本概念 1. 栈的定义 栈:只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在 一端进行插入和删除操作。如下图: 栈顶:线性表允许进行插入和删除的那一端。 ...原创 2018-07-26 20:25:43 · 215 阅读 · 0 评论 -
线性表的链式表示
由于顺序表的插入、删除操作需要移动大量的元素,影响了运行效率,由此引入了线性表的链式存储。链式存储线性表时,不需要使用地址连续的存储单元,即它不要求逻辑上相邻的两个元素在物理位置上也相邻,它是通过 “ 链 ” 建立起数据元素之间的逻辑关系,因此,对线性表 的插入、删除不需要移动元素,而只需要修改指针。-------------单链表的定义 线性表的链式存储又称...原创 2018-07-25 19:52:57 · 3793 阅读 · 0 评论 -
线性表的顺序表示
--------顺序表的定义 线性表的顺序存储又称为顺序表。它是用一组地址连续的存储单元,依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。第 1 个元素存储在线性表的起始位置,第 i 个元素元素的存储位置后面紧接着存储的是第 i + 1 个元素。因此,顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。 假设线性表 L 存储的起...原创 2018-07-24 12:04:09 · 6541 阅读 · 0 评论 -
线性表的定义和基本操作
------线性表的定义 线性表是具有相同数据类型的 n (n>= 0)个数据元素的有限序列。其中 n 为 表长,当 n = 0 时,该线性表是一个空表。若用 L 命名线性表,则其一般表示如下: L = ( a1 , a2 , a3 , ... , a(i) , a( i + 1) , ... , a(n) ) 其中,a1 是唯一的 “ 第一个 ...原创 2018-07-23 10:24:45 · 12405 阅读 · 1 评论 -
数据结构的基本概念
》》基本概念和术语 -------数据: 数据是信息的载体,是描述客观事物属性的数、字符以及所有 能输入到计算机中并被计算机程序识别和处理的符号的集合。 -------数据元素: 数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。 一个数据元素由若原创 2018-04-13 19:08:11 · 140 阅读 · 0 评论 -
目录
----------绪论 ------数据结构的基本概念 ------算法和算法评价----------线性表 ------线性表的定义和基本操作 ------线性表的顺序表示 ------线性表的链式表示----------栈和队列 ...原创 2018-04-13 16:22:01 · 129 阅读 · 0 评论 -
树的基本概念
----------树的定义 树是 N (N >= 0 )个结点的有限集合,N = 0 时,称为空树,这是一种特殊情况。在任意一棵非空树中 应满足: 1) 有且仅有一个特定的称为根的结点。 2)当 N > 1 时,其余结点可分为 m ( m > 0)个互不相交的有限集合T1 , T2 , T3 , .... T...原创 2018-08-01 10:33:52 · 10054 阅读 · 2 评论 -
二叉树的概念
1.二叉树的定义及其主要特性 》》二叉树的定义 1)、二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于 2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 2)、与树相似,二叉树也以递归的形式定义。二叉树是 n (n>= 0 )个结点的有限集合: ...原创 2019-10-05 13:03:57 · 1072 阅读 · 0 评论 -
图的存储及基本操作 ---- 邻接表法
1、 》》当一个图为稀疏图时,使用邻接矩阵表示法显然要浪费大量的存储空间。而图的邻接表法结合了 “ 顺序存储 ” 和 “ 链式存储 ” 方法,大大减少了这种不必要的浪费。 》》 所谓邻接表就是对图G中的每个顶点 Vi 建立一个单链表,第 i 个单链表中结点表示依附 顶点 Vi的边(对于有向图则是以顶点 Vi 的弧),这个单链表就称为顶点 Vi 的边表 (对于有向图...原创 2019-10-09 10:03:24 · 3103 阅读 · 0 评论 -
图的存储与基本操作 ----- 邻接矩阵法
1、 》》所谓邻接矩阵存储,就是用一个一维数组存储图中顶点的信息,用一个二维数组 存储图中边的信息(即各顶点之间的邻接关系),存储顶点之间邻接关系的二维 数组称为邻接矩阵。 》》结点数为n的图 G = (V , E)的邻接矩阵 A是 n * n的。将 G的顶点编号为 V1 , V2 , V3 , ......原创 2019-10-07 20:32:18 · 1102 阅读 · 0 评论 -
图的基本概念
1、图的定义 》》图 G由顶点集合 V和边集合 E组成,记为 G = (V , E ) ,其中 V(G) 表示图 G中顶点的有限非空集; E(G)表示图 G中顶点之间的关系(边)集合。 若,用 | V |表示图 G中顶点的个数,也称为图 G的阶, 若...原创 2019-10-07 11:35:44 · 4014 阅读 · 0 评论 -
树和二叉树的应用 -- ---哈夫曼(Huffman)树和哈夫曼编码
1、哈夫曼树的定义 》》在许多应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的权。从树根结点到 任意结点的路径长度(经过的边数 )与该结点上权值的乘积称为该结点的带权路径长度。 》》树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为: WPL = 其中是第i个叶...原创 2019-10-07 09:32:31 · 705 阅读 · 0 评论 -
树与二叉树的应用 ---- 平衡二叉树
1、平衡二叉树的定义 》》为了避免树的高度增长过快,降低二叉排序树的性能,我们规定在插入和删除 二叉树结点时,要保证任意结点的左、右子树高度差的绝对值不能超过 1 ,将 这样的二叉树称为“平衡二叉树 ”,简称“平衡树(AVL树)” 》》定义结点左子树和右子树的高度差为该结点的“平衡因子 ”,则平衡二...原创 2019-10-07 08:27:03 · 386 阅读 · 0 评论 -
树与二叉树的应用 ----- 二叉排序树
1、二叉排序树的定义 》》二叉排序树(简称 BST),也称为“二叉查找树 ”。二叉查找树或者是一棵空树,或者是一棵具有下列 特性的非空二叉树: a. 若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值 b. 若右子树非空,则右子树上所有结点关键子值均大于根结点的关键字值 ...原创 2019-10-05 21:55:45 · 519 阅读 · 0 评论 -
树、森林
1、树的存储结构 》》树的存储方式有多种,既可以采用“顺序存储结构 ”,也可以采用“链式存储结构 ”,但是无论采用何种 存储方式,都要求唯一地反映树中各结点之间的逻辑关系,这里介绍 3种常用的存储结构: 双亲表示法 、孩子表示法 、孩子兄弟表示法 》》双亲表示法 这种存储方式...原创 2019-10-05 19:14:06 · 148 阅读 · 0 评论 -
二叉树的遍历和线索二叉树
1、二叉树的遍历 》》 1)、所谓二叉树的遍历,是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问 一次,而且仅仅被访问一次。 2)、由二叉树的递归定义可知,遍历一棵二叉树便要决定对“根结点 N ”、“左子树 L ” 、 “ 右子树 R ”的访问顺序。...原创 2019-10-05 16:35:14 · 445 阅读 · 0 评论 -
算法和算法的评价
》》算法的基本概念: 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中 每一条指令表示一个或多个操作。此外,一个算法还具有下列5个重要的 特性。 (1)、有穷性 一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,原创 2018-04-16 22:02:52 · 7896 阅读 · 0 评论