![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
子歆
这个作者很懒,什么都没留下…
展开
-
数据结构之绪论
数据结构:是相互之间存在的一种或多种特定关系的数据元素集合。数据结构是一门研究非数值计算的程序设计问题的操作对象,以及他们之间的关系和操作等相关问题的学科。程序设计=数据结构+算法数据:是符合客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入计算机处理的符号集合。解释:数据就是符号同时具备两个前提:可以输入到计算机中; 能被计算机程序处理。对于整型,浮点型可...原创 2019-03-01 13:57:29 · 92 阅读 · 0 评论 -
数据结构之图1
图是由顶点的有穷非空集合和顶点的边的集合组成,通常表示为:G(V,E),其中G是一个图,V是图G中顶点的集合,E是图G中边的集合。图中的数据元素称为顶点。注意:顶点是有穷非空集合。在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示。边集可以是空的。无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边,用无序偶(vivj)来表示。如果任意两个顶点之间的...原创 2019-03-18 10:17:12 · 103 阅读 · 0 评论 -
数据结构之查找2
数据结构的最终目的是提高数据的处理速度,索引是为了加快查找速度而设计的一种数据结构。索引就是把关键字和它对应的记录相关联的过程。所谓线性索引就是把索引项集合组织为线性结构,也称为索引表。稠密索引就是指在线性索引中,将数据集中的每个记录对应一个索引项。对于稠密索引来说,索引项一定按照关键码有序排列。分块索引:分块有序,是把数据集分成若干块,并且满足两个条件:块内无序 块间有...原创 2019-03-25 09:41:24 · 76 阅读 · 0 评论 -
数据结构之查找1
查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表是由同一个类型的数据元素(或记录)的集合。关键字是数据元素中某个数据项的值。若次关键字可以唯一的标识一个记录,则称次关键字为主关键字。对于识别多个数据元素(或记录)的关键字,称为次关键字。静态查找表:只做查找操作的查找表。主要操作:查找某个特定的元素是否在表中,检索特定的数据元素和各种属性...原创 2019-03-22 10:02:47 · 162 阅读 · 0 评论 -
数据结构之查找3
平衡二叉树是一种二叉排序树,其中每一个结点左子树和右子树高度差至多等于1。二叉树左子树深度减去右子树深度的值称为平衡因子。平衡因子只可能-1、0、1。距离插入结点最近的,且平衡因子的绝对值大于1的结点的根的子树我们称为最小不平衡子树。//二叉树的二叉链表结点结构定义typedef struct BiTNode{ int data; int bf; st...原创 2019-03-26 10:03:06 · 224 阅读 · 0 评论 -
数据结构之查找4
散列技术就是在记录存储位置和它关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。采用散列技术将记录存储在一块连续的存储空间中,这块存储空间称为散列表或哈希表,关键字对应的记录存储位置称为散列地址。散列技术既是一种存储方法也是一种查找方法。散列技术最适合的求解问题是查找和给定值相等的记录。//散列表查找实现#define SUCCESS 1...原创 2019-03-27 09:17:40 · 77 阅读 · 0 评论 -
数据结构之归并排序
归并排序:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后来两两归并,得到[n/2]个长度为2或1的有序子序列;两两归并......如此重复下去,知道得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。//对顺序表L作归并排序void MergeSort(SqList* L){ MSort(L->r,L->r,1,L->...原创 2019-04-01 09:36:21 · 117 阅读 · 0 评论 -
数据结构之快速排序
快速排序:通过一趟排序将待排的记录分割为独立地两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对两部分的记录继续进行排序,以达到整个序列有序的目的。//对顺序表L作快速排序void QuickSort(SqList *L){ QSort(L,1,L->length);}void QSort(SqList *L,int low,int high){ ...原创 2019-04-01 10:28:32 · 192 阅读 · 0 评论 -
数据结构之冒泡排序
排序:假设含有n个记录的序列为{r1,r2,......,rn},其相应的关键字为{k1,k2,......,kn},需确定1,2,.......,n的一种排列p1,p2,.......,pn,使其相应的关键字满足kp1<=kp2<=,......,<=kpn(非递减或非递增)关系.即使得序列称为一个按关键字有序的序列{rp1,rp2,.....,rpn},这样的操作称为排序。...原创 2019-03-28 09:10:40 · 287 阅读 · 0 评论 -
数据结构之选择排序
简单选择排序:就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录并和第i(1<=i<=n)记录交换。//对顺序表L作简单选择排序void SelectSort(SqList *L){ int i,j,min; for(i = 1;i < L->length;i++) { min = i; ...原创 2019-03-29 08:37:22 · 82 阅读 · 0 评论 -
数据结构之直接插入排序
直接插入排序:的基本操作是将一个记录插入到已经拍好的序的有序表中,从而得到新的、记录数增1的有序表。//对顺序比L作直接插入排序void InsertSort(SqList *L){ int i,j; for(i = 2;i <= L->length;i++) { if(L->r[i] < L->r[i-1]) ...原创 2019-03-29 08:58:45 · 328 阅读 · 0 评论 -
数据结构之希尔排序
//对顺序表L作希尔排序void ShellSort(SqList *L){ int i,j; int increment = L->length; do { increment = increment / 3 + 1;//增量序列 for(i = increment + 1;i <= L->length;i+...原创 2019-03-29 09:25:36 · 182 阅读 · 0 评论 -
数据结构之图1
图是由顶点的有穷非空集合和顶点的边的集合组成,通常表示为:G(V,E),其中G是一个图,V是图G中顶点的集合,E是图G中边的集合。图中的数据元素称为顶点。注意:顶点是有穷非空集合。在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示。边集可以是空的。无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边,用无序偶(vivj)来表示。如果任意两个顶点之间的...原创 2019-03-18 10:11:16 · 171 阅读 · 0 评论 -
数据结构之树
树:树是n(n>=0)个结点的有限集。n=0时为空树。在任意一棵非空树中:1)有且仅有一个特定的根的结点;2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2....Tm,其中每一个集合本身又是一棵树,并且称为根的 子树。注意:n>0时,根节点时唯一的,不可能存在多个根节点。 m>0时,子树的个数没有限制,但它们一定互不相...原创 2019-03-13 09:25:13 · 86 阅读 · 0 评论 -
数据结构之线性表(1)
线性表:零个或多个数据元素的有限序列。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。线性表抽象类型定义:ADT 线性表(List)Data:Operation: InitList(*L) //初始化线性表 ListEmpty(L) //线性表为空返回true,否则返回false ...原创 2019-03-05 10:05:46 · 149 阅读 · 0 评论 -
数据结构之线性表(2)
线性表的链式存储特点使用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。链表中第一个节点存储的位置叫头指针。单链表的第一个节点前附设一个节点叫头结点。头指针:头指针是指链表指向第一个节点的指针,若链表有头结点,则是指向头指针的结点。 头指针具有标识作用,所以常用头指针冠以链表的名字。 无论链表是否为空,头指针都不为空,头指针是链表的必要元素。...原创 2019-03-06 10:32:09 · 361 阅读 · 0 评论 -
数据结构之二叉树
二叉树是n(n>=0)个节点的有限集合,该集合或者空集(空二叉树),或者由一个根结点和两个树互不相交的、分别成为根结点的左子树和右子树的二叉树组成。特点:每个结点最多有两棵子树,所以二叉树的度不会大于2的结点,没有或有一棵子树都可以 左子树和右子树都是有次序的,次序不能任意颠倒。 即使树中某结点只有一棵子树,也要区分左子树和右子树。二叉树的五种形态:空二叉树 只有一个根结...原创 2019-03-14 09:38:12 · 76 阅读 · 0 评论 -
数据结构之栈
栈是限定仅在表尾进行插入和删除的线性表。允许插入和删除的一端叫栈顶,另一端叫栈底。不含有任何数据元素的栈叫空栈。栈又称为后进先出的线性表。简称LIFO结构。//栈的抽象数据类型ADT 栈(stack)Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitStack(*S):初始化操作,建立一个空栈S。 Dest...原创 2019-03-07 09:31:48 · 223 阅读 · 0 评论 -
数据结构之队列
队列:只允许一端插入,而允许另一端删除的线性表。队列是一种先进先出的线性表,简称FIFO,允许插入的一端叫队尾,允许删除的一端叫队头。ADT 队列(Queue)Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitQueue(*Q) :初始化操作,建立一个空队列Q DestroyQueue(*Q):若队列Q存在,...原创 2019-03-09 20:46:07 · 378 阅读 · 0 评论 -
数据结构之算法
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法的五大特性:输入、输出、有穷性、确定性和可行性。算法的设计特性:正确性、可读性、健壮性、高效率和低存储量需求。算法具有零个或多个输入,一个或多个输出。有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。确定性:算法的每一个步...原创 2019-03-04 21:29:16 · 90 阅读 · 0 评论 -
数据结构之线索二叉树
指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。二叉树以某种次序遍历使其变为线索二叉树的过程称为线索化。线索化的过程就是在遍历的过程中修改空指针的过程。//二叉树的二叉线索存储结构定义typedef enum{Link,Thread} PointerTag; //Link==0表示指向左右孩子指针 ...原创 2019-03-15 09:30:59 · 104 阅读 · 0 评论 -
数据结构之串
串由零个或多个字符组成的有限序列,又名叫字符串。串中字符数目n是成为串的长度,零个字符的串称为空串。/*ADT 串(string)Data 串中元素仅由一个字符组成,相邻元素具有前驱和后继关系。Operation StrAssign(T,*chars):生成一个其值等于字符串常量chars的串T。 StrCopy(T,S):串S存在,由串S复制得串T ...原创 2019-03-11 09:36:09 · 320 阅读 · 0 评论 -
数据结构之图2
十字链表:整合了邻接表和逆邻接表,即容易找到v1的头,也能找到v1的尾,因而容易求得顶点的出度和入度。边集数组:由两个一维数组构成,一个存储顶点信息,一个存储边的信息。这个边数组每个数据元素由一条边的起点下标,终点下标和权组成。图的遍历:从图中一个顶点开始访遍图中其余的顶点,且使每个顶点仅访问一次,这一过程叫做图的遍历。typedef int Boolean; Boo...原创 2019-03-20 09:46:33 · 56 阅读 · 0 评论 -
数据结构之KMP算法
当j=1时,next[j]=0;其他情况,next[j]=1next[j]=max{1<k<j,且p1...k-1 = pj-k+1....pj-1},此集合不为空时。//通过计算返回子串T的next数组void get_next(string T,int *next){ int i,j; i = 1; j = 0; next[1] =...原创 2019-03-12 09:51:11 · 108 阅读 · 0 评论 -
数据结构之图3
对于非网图来说, 它没有边上的权值,两个顶点经过的边数最少的路径称为最短路径。对于网图来说,两个顶点经过边上的权值之和最少的路径,并且称路径上的第一个顶点为源点,最后一个顶点为终点。迪杰斯特拉算法:#define MAXVEX 9#define INFINITY 65535typedef int Pathmatirx[MAXVEX]; //用于存储最短路径下标的数组typede...原创 2019-03-21 09:51:48 · 112 阅读 · 0 评论 -
数据结构之堆排序
堆具有完全二叉树的性质:每个结点大于等于左右孩子的堆称为大顶堆,或每个结点小于或等于左右孩子的堆称为小顶堆。堆排序:将待排序的序列构建成一个大顶堆,此时,最大值在整个堆的根结点。将它移走(其实就是将它与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新造成一个,这样会得到n个元素的次小值,如此反复执行,便能得到一个有序的序列。//对顺序表L进行堆排序boid ...原创 2019-03-29 09:42:33 · 149 阅读 · 0 评论