数据结构
文章平均质量分 57
你板子冒烟了
这个作者很懒,什么都没留下…
展开
-
笔记1 算法简介
原创 2021-08-02 22:56:12 · 71 阅读 · 0 评论 -
笔记0 绪论
原创 2021-08-01 23:16:36 · 101 阅读 · 0 评论 -
12.4.2 虚拟存取方法文件 / VSAM文件
虚拟存储存取文件 / VSAM只需要多逻辑上的进行操作,不需要考虑柱面磁道的实际大小原创 2021-03-09 23:55:42 · 565 阅读 · 0 评论 -
12.6 多关键字文件
概述多关键字文件的特点在对文件进行检索操作时:不仅对主关键字进行检索还经常对次关键字进行检索若文件组织中只有主关键字索引,那么在处理对次关键字的询问时,只能顺序存取文件中的每一个记录进行比较,效率很低因此需要建立一系列的次关键字索引次关键字索引可以是稠密的,也可以是非稠密的次关键字索引表可以是顺序表,也可以是树表与主关键字索引表不同,每个索引项应包含:次关键字、具有同一次关键字的过个记录的主关键字或物理记录号两种多关键字文件的组织方法1、多重表文件2、倒排文件原创 2021-03-10 00:49:18 · 728 阅读 · 0 评论 -
12.5 直接存取文件(散列文件)
没有索引原创 2021-03-10 00:05:48 · 924 阅读 · 0 评论 -
12.4.1 索引顺序存取方法文件 / ISAM文件
稳健特点主文件按主关键字有序,因此可以对一组记录建立一个索引项两种典型的索引顺序文件索引顺序存取文件 / ISAM文件:专门为磁盘存取设计的文件组织方法主文件按柱面集中存放,同时建立三级索引:磁道索引、柱面索引 和 主索引...原创 2021-03-09 23:17:42 · 1609 阅读 · 0 评论 -
12.3 索引文件
索引表一张指示文件的逻辑记录和物理记录之间的对应关系的表如下图索引项索引表中的每个记录。每个索引项(记录)都由 关键字 和 指针 组成索引文件包括 文件数据区 和 索引表 两大部分的文件叫作索引文件文件数据区存放主文件索引表既可以是一级,也可以有多级索引索引文件有两种:索引顺序文件:索引项总是按关键字有序,数据区也按关键字有序索引非顺序文件:索引项总是按关键字有序,数据区不按关键字顺序排列...原创 2021-03-09 20:50:09 · 2075 阅读 · 1 评论 -
12.2 顺序文件
顺序文件记录在文件中的排列顺序是由记录进入存储介质的次序决定的。换言之,文件物理结构中记录的排列顺序 和 文件逻辑结构中记录的排列顺序一致。顺序文件的组织形式连续文件:次序相继的两个物理记录在存储介质上的存储位置是相邻的串联文件:物理记录之间的次序由指针相链表示操作特点1、顺序文件是根据记录或序号的相对位置来进行存取的文件组织方式2、便于进行顺序存取,不便于进行直接存取。若要取第 i 个记录,必须先读出前 i-1 个记录,对于等长连续记录文件可以进行折半查找(文件序号是有序的)。..原创 2021-03-08 22:14:15 · 2291 阅读 · 2 评论 -
12.1 文件 和 相关基本概念
文件的定义文件是存于外部存储器的记录的集合。存于内部存储器的记录的集合叫作查找表。记录时文件中可以进行存取的数据的基本单位本章主要讨论:文件在外存储器中的表示方法关于文件的各种运算的实现方法:检索、修改、排序检索顺序存取:存取当前记录的下一条记录直接存取:存取第 i 个记录按关键字存取:存取其关键字等于给定值的记录修改插入:向文件中插入一个或若干个记录删除:从文件中删除一个或若干个记录更新:该边文件中某个记录的属性文件的分类(按其中记录的类型)1、操作系统..原创 2021-03-08 21:34:50 · 217 阅读 · 1 评论 -
10.7 各种排序方法的综合比较
一、时间性能二、空间性能三、排序方法的稳定性能四、排序方法复杂度的下限原创 2021-02-28 16:00:08 · 89 阅读 · 0 评论 -
10.6.2 链式基数排序
“分配-收集”方法基数:每个单位的数位或者字符的值集的大小(0到9,a到z)链式基数排序“分配” 和 “收集” 的实际操作仅为修改链表中的指针和设置队列的头尾指针。算法如下#define MAX_NUM_OF_KEY 8 //关键字项数的最大值#define RADIX 10 // 关键字基数,此时是十进制整数的基数#define MAX_SPACE 10000typedef struct{ KeysType keys[MAX_NUM_OF_KEY];}..原创 2021-02-28 15:24:10 · 776 阅读 · 1 评论 -
10.6.1 多关键字的排序
多关键字的排序称第一个关键字为最主位关键字。(ki0)最主位关键字的大小决定整个关键字集合的大小;最主位关键字大小相同,则比较次一位关键字。(ki1)实现多关键字排序通常有两种做法:1、最高位优先法(MSD)2、最低位优先法(LSD)最高位优先法(MSD)从最主关键字开始进行排序,排完分成若干子序列,进行下一次排序再分…最低位优先法(LSD)不再分子序列,第一次排完已经按班内序列号有序了,第二次排完已经按班内序列号、班号有序了,第三次排序完成。...原创 2021-02-28 13:51:51 · 1241 阅读 · 0 评论 -
10.6.0 基数排序
借助多关键字排序的思想来实现单关键字排序的算法。10.6.1 多关键字的排序10.6.2 链式基数的排序原创 2021-02-28 13:25:33 · 82 阅读 · 0 评论 -
10.5 归并排序
归并排序的基本思想将两个或两个以上的有序子序列“归并”为一个有序序列。归并(核心操作)算法void Merge(RcdType SR[], RcdType &TR[], int i, int m, int n){ // 将有序的 SR[i .. m] 和 SR[m+1 .. n]归并为有序的 TR[i .. n] for(j=m+1, k=i; i<=m && j<=n; k++ ) { if(SR[i].key <= SR[j].k.原创 2021-02-28 11:05:24 · 149 阅读 · 0 评论 -
10.4.3 堆排序
堆堆是满足下列性质的序列。{ r1 , r2 , … , rn }ri <= r2i 且 ri <= r2i+1或者ri >= r2i 且 ri >= r2i+1这样的序列,叫作 堆。用二叉树表示,就是一个结点的关键字一定比它两个子树根结点的关键字小或者大。堆顶是其所在序列的最小值或者最大值。堆排序就是利用对的特性对记录序列进行排序的中排序方法。筛选对一棵左右子树均为堆的完全二叉树,调整根结点使整个二叉树为堆。...原创 2021-02-27 22:26:50 · 91 阅读 · 0 评论 -
10.4.0 选择排序
选择排序的基本思想每一趟在 n - i + 1 ( i = 1, 3, ... , n-1 ) 个记录中选取关键字最小的记录作为有序序列中第 i 个记录。最典型、最简单的选择排序就是 简单选择排序。10.4.1 简单选择排序10.4.2 树形选择排序10.4.3 堆排序...原创 2021-02-27 20:27:57 · 74 阅读 · 0 评论 -
10.3 快速排序
一、起泡排序二、一趟快速排序三、快速排序四、快速排序的时间分析一、起泡排序交换排序最简单的情况,相当于直接插入排序之于插入排序。一趟起泡排序如下图起泡排序算法如下void BubbleSort(SqList L, int n){ i = n; while(i>1) { lastExchangeIndex = 1; for(j=1; j<i; j++) { if(L.r[j+1].key < L.r[j].key) { Swa.原创 2021-02-27 17:45:31 · 174 阅读 · 0 评论 -
10.2.3 希尔排序
希尔排序,又叫做缩小增量排序。希尔排序的基本思想对待排记录先做宏观调整,再作微观调整。宏观调整指的是跳跃式的插入排序。具体做法:将记录序列分成若干子序列,分别对每个子序列进行插入排序。省的让关键字特别小的记录一个单位一个单位的前移。增量逐渐减小(从宏观到微观),直到1。如选择增量为5,3,1 … 比较完成。每一趟里面任然是插入排序。d=1时接近于非递增序了,要移动的次数很少了。算法如下// 一趟希尔排序算法,dk是本轮希尔排序所选用的增量void ShellInsert(SqLi.原创 2021-02-27 15:58:59 · 470 阅读 · 0 评论 -
10.2.2 其他插入排序
折半插入排序因为R[1 … i-1]是一个按关键字有序的有序序列,则可以利用折半查找实现 在R[1 … i-1] 中查找R[i]的插入位置。如此实现的插入排序为折半插入排序。因此折半排序的步骤同直接插入排序(三步)。代码如下:void BiInsertionSort(Elem R[], int n){ for(i=2; i<=L.length; i++) { R[0] = R[i]; //暂存到R[0] // 折半查找寻找插入位置 low = 1; high = i-原创 2021-02-27 12:20:24 · 130 阅读 · 0 评论 -
10.2.1直接插入排序
利用顺序查找实现 在R[1 … i-1] 中查找 R[i] 的插入位置。算法实现要点1、从 R[i-1] 起向前进行顺序查找,监视哨设置在 R[0]。R[0] = R[i]; //设置哨兵for(j=i-1; R[0].key<R[j].key; --j ); //从后往前找循环结束表明R[i]的插入位置位置为j+1。2、对于在查找过程中找到的那些关键字不小于R[i].key的记录,并在查找的同时实现记录向后移动。for(j=i-1; R[0].key<R[j].key; j--.原创 2021-02-27 11:06:50 · 124 阅读 · 0 评论 -
10.2.0 插入排序
10.2.1 直接插入排序10.2.2 其他插入排序10.2.3 希尔排序原创 2021-02-27 10:17:11 · 81 阅读 · 0 评论 -
10.1 内部排序
排序将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列排序的分类1、内部排序2、外部排序内部排序待排序记录存放在计算机随机存储器中进行的排序过程,整个排序过程不需要访问外存便能完成。内部排序是外部排序的基础,本章介绍内部排序。外部排序待排序记录的数量很大,整个序列的排序过程不可能在内存中完成,在排序过程中仍然需要对外存进行访问的排序过程。内部排序内部排序过程是一个逐步扩大记录的有序序列长度的过程,如下图:把整个序列变成两个部分,无序区和有序..原创 2021-02-27 01:32:35 · 166 阅读 · 0 评论 -
非线性结构习题
二叉树6.12 已知 L[i] 和 R[i] (i = 1 , 2 , … , n)分别指示二叉树中第 i 个结点的左孩子和右孩子结点,0表示空,试写判别 结点u 是否是 结点v 的子孙的算法。------------------------------------- 分析 -------------------------------------u 是否是 v 的子孙 --> 从 结点v 出发遍历能够到达 结点u判断是否是子孙 ---> 遍历算法给定的存储结构实质上是一个 二叉链表原创 2021-02-11 23:42:55 · 212 阅读 · 0 评论 -
7.2.0 图的存储结构
从线性结构的线性关系,到树形结构的层次关系,再到现在的图结构图结构比较复杂,图中任意两个顶点都可能存在联系。1、图结构也无法以数据元素在存储区中的物理位置来表示元素之间的关系。即图没有顺序表的存储结构。2、用多重链表表示图结构:若按度数最大的顶点来设计结点结构会浪费很多存储单元;若按每个顶点自己的度数来设计不同的结点结构会造成操作不便。常用于表示图结构的方法有二维数组 / 邻接矩阵 :7.2.1 二维数组 / 邻接矩阵邻接表 :7.2.2 邻接表十字链表:7.2.3 十字链..原创 2021-02-01 17:47:11 · 89 阅读 · 0 评论 -
7.5.2关键路径
AOV - 网顶点表示活动弧表示活动间的优先关系此类有向图叫作 AOV - 网AOE - 网顶点表示事件边表示活动此类带权、有向的无环图(权表示活动的持续时间)。AOE - 网 一般用来估算一个工程的完成时间AOE -网 示例下图是一个有 11 项活动的 AOE - 网。其中有 9 个事件 v1 , v2 , … , v9。每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。如 v1 表示整个工程开始,v9 表示整个工程结束,v5 表示 a4 和 a5 已..原创 2021-01-31 21:41:23 · 209 阅读 · 0 评论 -
7.5.1 拓补排序(有向图)
拓补排序相关定义偏序指某个集合中仅有部分成员之间可比较全序指集合中全体成员之间均可比较如下图 a 表示偏序,b 表示全序在图中,弧(x,y)表示 x <= y。若在 图a 中人为的加上 v2 <= v3 ,则 图a 也是全序。拓补排序简言之,由某个集合上的一个偏序得到该集合上的一个全序的操作,叫做拓补排序。全序又叫做拓补有序。如何进行拓补排序1、在有向图中选一个没有前驱的顶点且输出之。2、从图中删除该顶点和所有以它为尾的弧。3、重复上述两步,原创 2021-01-31 16:39:30 · 820 阅读 · 0 评论 -
7.5.0 有向无环图及其应用
有向无环图没有环,有方向的图(directed acycline graph),简称 DAG 图有向树、有向无环图和有向图的对比图例有向无环图是描述含有公共子式的表达式的有效工具例如表达式:( ( a + b ) * ( b * ( c + d ) ) + ( c + d ) * e ) * ( ( c + d ) * e ) 分别用二叉树和有向无环图描述表达式可见,利用有向无环图,可以实现对相同子式的共享,从而节约存储空间。检查一个有向图是否存在环比检查一个无向图是否存在环..原创 2021-01-31 15:46:29 · 421 阅读 · 0 评论 -
7.4.4关节点和重连通分量
关节点若删去顶点 v 以及和 v 相关联的各边之后,将图的一个连通分量分割成两个或者两个以上的连通分量,则称顶点 v 为该图的一个关节点。重连通图一个没有关节点的连通图称为重连通图重连通图的性质任一一堆顶点之间至少存在两条路径,则在删去某个顶点以及依附于该顶点的各边时也不破坏图的连通性。连通度:若在连通图上至少删去 k 个顶点才能破坏图的连通性,则称此图的连通度为 k。关节点和重连通在实际中应用较多,如一个表示通信网络的图的连通度很高,其系统可靠,无论是哪一站点出现故障或者遭到..原创 2021-01-31 14:53:12 · 1482 阅读 · 0 评论 -
7.4.3 最小生成树
问题的引入(构造最小代价生成树)假设要在 n 个城市之间建立通信联络网,则连通 n 个城市只需要 n-1 条线路。此时需要考虑如何在最节省经费的前提下建立这个通信网。在每两个城市之间都可以设置一条线路,相应的都要付出一定的经济代价,n 个城市之间最多可以设置 n( n-1 ) / 2 条线路,需要在其中选择 n-1 条,使得总的耗费最少。使用连通网来表示 n 个城市以及 n 个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,每条边的权值表示相应的代价。对于 n 个原创 2021-01-30 19:29:41 · 880 阅读 · 0 评论 -
7.4.0 图的连通性问题
连通:对于无向图 G,从顶点 v 到 顶点 v ‘ 有路径,则称 v 和 v ’ 是连通的。连通图:无向图中,任意两个顶点都是连通的。连通分量:无向图中的极大连通子图。如下 G3 是非连通图,但它有 3 个连通分量。非连通图都可以看作是若干个连通分量构成。7.4.1 无向图的连通分量和生成树7.4.2 有向图的强连通分量7.4.3 最小生成树7.4.4 关节点和重连通分量...原创 2021-01-29 15:47:02 · 681 阅读 · 0 评论 -
7.3.2 广度优先搜索
广度优先搜索遍历 类似于 树的按层次遍历的过程广度优先搜索遍历过程1、假设从图中某顶点 v 出发,在访问了 v 之后依次访问 v 的各个未曾访问过的邻接点,2、然后分别从这些邻接点出发,依次访问它们的邻接点。使得先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问。3、完毕后若图中还有未被访问的顶点,那么另选一个未曾被访问的顶点作起始点,重复上述过程直到所有的顶点都被访问。广度优先搜索遍历的过程是以某个顶点 v 为起始点,由静至远,依次访问和 v 有路径相通且路径长度为 1 ,2 ..原创 2021-01-29 14:43:34 · 705 阅读 · 0 评论 -
7.3.1深度优先搜索
定义类似于树的先根遍历,但要访问结点前要判断此节点是否被访问过。深度优先遍历过程假设初始状态是一个无向图中所以的结点都未被访问,从图中某个顶点 v 出发,访问此顶点,然后依次对 v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和 v 有路径相通的顶点都被访问到;若此时图中还有定点未被访问,则另选图中未被访问的顶点为始点,重复上述过程,直至所有的顶点都被访问过。(对每个结点来说都是一个递归的过程)图例对 G4 进行深度优先遍历假设从顶点 v1 出发进行搜索,在访问了顶点 v1原创 2021-01-29 01:12:11 · 432 阅读 · 0 评论 -
7.3.0 图的遍历
从图中某一个顶点出发,是每个顶点都被访问且只被访问一次,叫做图的遍历图的遍历算法是求解图的连通性问题、拓补排序和求关键路径等算法的基础图的遍历比树的遍历更加复杂,图中任意一个顶点都有可能和其余的任一顶点相连接。通常为了避免一个顶点被访问多次,可以设置一个辅助数组, visited [ vexnum ] ,记录某个顶点是否被访问过。通常有两条遍历图的路径7.3.1 深度优先搜索7.3.2 广度优先搜索...原创 2021-01-28 23:00:33 · 89 阅读 · 1 评论 -
7.2.4 邻接多重表
邻接多重表是对于无向图而言,十字链表对于有向图而言。邻接多重表也是一种链式存储结构。原创 2021-01-28 22:40:41 · 1883 阅读 · 0 评论 -
7.2.3 十字链表
十字链表适用于有向图。十字链表时有向图的另一种链式存储结构。十字链表中:对应于有向图中每个顶点都有一个结点,称此类结点为顶点结点。对应于有向图中每一条弧都有一个结点,称此类结点为弧结点。顶点结点由 3 个域组成1、data域 :存储和顶点相关的信息,如顶点的名称。2、firstin域 :指向以该顶点为弧头的第一个弧结点。3、firstout域 :指向以该顶点为弧尾的第一个弧结点。弧结点由5个域组成1、尾域 / tailvex域 :表示弧尾所在顶点在图中的位置。2、头域.原创 2021-01-28 00:05:14 · 670 阅读 · 0 评论 -
7.2.2 邻接表
相关定义邻接表:是图的一种链式存储结构。在邻接表中,对每个顶点建立一个单链表,第 i 个单链表中的结点表示依附于顶点 vi 的边(对有向图而言则是以顶点 vi 为尾的弧)。单链表由一个表头结点和若干个表中结点组成。表头结点此类型结点设置有链域和数据域。( firstarc域 和 data域 )链域指向链表中的第一个结点;数据域存储存储顶点 vi 的名或其它相关信息。表结点 ( 弧 )此类型结点设置有邻接点域,链域和数据域。( adjvex域,nextarc域 和 info域 )邻接点原创 2021-02-01 17:58:57 · 2359 阅读 · 0 评论 -
7.2.1 二维数组 / 邻接矩阵表示法
前言从线性结构的线性关系,到树形结构的层次关系,再到现在的图结构图结构比较复杂,图中任意两个顶点都可能存在联系。图结构也无法以数据元素在存储区中的物理位置来表示元素之间的关系。即图没有顺序映像的存储结构用多重链表表示图结构,若按度数最大的顶点来设计结点结构会浪费很多存储单元;若按每个顶点自己的度数设计不同的结点结构会造成操作不便。常用的方法有邻接表邻接多重表十字链表数组表示法用两个数组分别存储数据元素(顶点)的信息 和 数据元素之间的关系(边或弧)的信息。#de原创 2021-02-01 17:40:49 · 2432 阅读 · 0 评论 -
7.1图的定义和术语
前言线性表中,数据元素仅有线性关系,每个数据元素只有一个前驱,一个后继。树形结构中,数据元素有着明显的层次关系,上一层的数据元素可能和下一层多个元素(孩子结点)直接相关;下一层的数据元素却只能和上一层中的一个元素(双亲结点)直接相关。图形结构中,结点之间的关系是任意的,任意两个元素之间都可能相关。常用 定义和术语顶点:图中的数据元素弧:V 是顶点的有穷非空集合;VR 是两个顶点的关系集合。若 < v, w > ∈ VR,则 < v, w > 表示从 v原创 2021-02-01 16:54:14 · 1601 阅读 · 0 评论 -
6.8 树习题
6.47 按层次顺序(同一层从左向右)遍历二叉树的算法Status LevelOrderTraverse(BiTree &T, Status (*visit)(TElemType e)){ QElemType p; // p用来存储树中结点 Queue q; // 存放结点的队列 InitQueue(q); if(T) { EnQueue(q, T); while(!QueueEmpty(q)) { DeQueue(q, p); visit(p->d.原创 2021-01-17 00:46:14 · 234 阅读 · 0 评论 -
6.7 回溯法和树的遍历
回溯法实质就是先序遍历一棵 “状态树” 的过程,这颗树不是遍历前预先建立的,而是在遍历过程中建立详细介绍:[回溯算法] 五大常用算法之回溯法求含n个元素的集合的幂集集合A的幂集是由集合A的所有自己所组成的集合。如:A={ 1, 2, 3 },则A的幂集 p(A) = { {1, 2, 3} , {1, 2} , {1, 3} , {2, 3} , {1} , {2} , {3} , { } }幂集p(A) 的每个元素是一个集合,它或是空集,或含集合A中的一个元素,或含集合A中的两个元素,或.原创 2021-01-14 23:49:01 · 455 阅读 · 0 评论