数据结构
数据结构
SJY_ZY
顺其自然:是做到竭尽所能后的不强求,而非两手一摊的不作为。
展开
-
数据结构——查找
查找的基本概念顺序查找无序查找顺序查找折半查找分块查找B树插入没有破坏结构的情况叶结点删除直接删除兄弟够借兄弟不够借分支结点删除B+树B树与B+树的比较查找方式散列表(哈希表)散列函数的构造方法直接定值法除留取余法数字分析法平方取中法折叠法冲突避免开放定址法增量计算方法拉链法查找总结...原创 2020-10-29 15:13:02 · 219 阅读 · 0 评论 -
数据结构——图的应用
最小生成树生成树 连通图包含全部顶点的有效连通子图性质1.不一定唯一最小生成树可能唯一可能不唯一,当所有边的权重都不一样的时候最小生成树一定唯一,如果图只有结点数减一条边时一定唯一。算法思想prim先加入顶点A,找出A与其他为加入顶点边最短的边同理找出顶点A和顶点C与为加入顶点之间最短的边同上,依次比遍历完所有的顶点prim 算法的实现算法实现过程(此处有错误)KRUSKALkruskal代码实现...原创 2020-10-13 01:07:38 · 567 阅读 · 0 评论 -
数据结构——图的基本操作以及遍历
基本操作Adjacent(G,x,y)判断图G是否存在边<x,y>或(x,y),邻接矩阵法的效率更高无向图有向图Neighbors(G,x)列出图中与结点X相邻的边无向图无向图中邻接表法直接搜索这个顶点的边表就可以了,效率比邻接矩阵效率高有向图有向图中邻接表法搜索出边很容易,但是搜索入边就很难了,效率不如邻接矩阵法InsertVertex(G,x)在图中插入顶点XDleteVertex(G,x)从图G中删除顶点XAddEdge(G,x,y)若无向边(x原创 2020-10-11 16:02:25 · 1311 阅读 · 0 评论 -
数据结构——图的存储结构
邻接矩阵法通过矩阵来表示所有的有向图的邻接矩阵法无向图的邻接矩阵法无向图的矩阵一定是对称的,可以才用压缩存储方式网的邻接矩阵法网就是带权值的图,所以数组里面直接放权值,不存在的边用正无穷表示实现方法邻接矩阵法的性质A的n次方的含义表示对应结点之间长度为N的路径个数邻接表法...原创 2020-10-08 11:35:36 · 205 阅读 · 0 评论 -
数据结构——图的基本概念
图的概念图:由顶点集v和边集E组成,记为G-(V,E),图是有限非空集,顶点集不能为空,但是边集可以为空有向图&有向图边有方向的图&边没有方向的图简单图&多重图不重复边,不存在结点到自身的边完全图无向完全图和有向完全图子图设两个图G=(V,E)和G’=(V’,E’),若V’是V的子集,E‘是E的子集则称G’为G的子图结点个数一样称之为生成子图与自身一样也是子图没有边也为子图不满足边两边都有结点,不能称之为图,更不能为子图连通&强连通原创 2020-10-07 10:48:46 · 545 阅读 · 0 评论 -
数据结构——树的应用
二叉排序树左边子树均小于本节点,右子树均小于本节点,用中序遍历可以从小到大排序查找二叉树非空时,查找根节点若相等这查找成功,若不等,则小于根节点查找左子树,大于根节点查找右子树,当查找到叶节点人没有查找到相应的值,则查找失败。插入若二叉排序树为空,则直接插入节点若二叉排序树非空,当值小于根节点时,插入左子树,当值大于根节点时,插入右子树,当值等于根节点时不进行插入构造读入一个元素并建立节点,若二叉树为空将其作为根节点,若二叉树非空,当值小于根节点时,擦汗如左子树,当值大于根节点时,插入原创 2020-10-06 11:09:28 · 2042 阅读 · 0 评论 -
数据结构——树和森林
树树是一种逻辑结构树是n个结点的有限集合,n=0时,称为空树,任意的非空树满足一下要求:1)有且仅有一个特定的称为根的结点。2)当n>1时,其余结点可分为m个互不相交的有限集合,其中每个集合本身又是一棵树,称为根结点的子树,n个结点的树只有n-1条边3)树个根节点没有前驱结点,除了根节点以外的所有结点都有且仅有一个前驱结点4)数中的结点有多个或者0个后继结点树的基本术语祖先结点,子孙结点,双清结点:k结点,根结点A到K的唯一路径上的任意结点(A,B,E),都是k结点的祖先结点,k是.原创 2020-10-04 08:49:59 · 7653 阅读 · 2 评论 -
数据结构——串(kmp算法)
串是由零个或多个字符组成的有限序列,一般记为S=‘a1a2……an’若两个串长度相等且每个对应位置的字符都相等时,称这两个串是相等的子串S=‘Hello World’ S1=‘Hello’ S2’World’ S1和S2都是S的子串串的储存结构1.定长顺序存储和堆存储结构#define MAXLEN 255//定长typedef struct { char ch[MAXLEN]; int length;}SString;//堆存储typedef struct原创 2020-07-29 14:09:33 · 1108 阅读 · 0 评论 -
数据结构——数组
数组的维度一维数组二维数组二位数组的存储结构按行优先,一行一行存,如a(5,6),存储在数字里面的位置为:5x每行的个数+6,按列优先存储结构同按行存储矩阵的压缩存储指多个相同的元素只分配一个储存空间,对零元素不分配存储空间特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律的矩阵特殊矩阵的压缩存储:找出特殊矩阵的春存储规律慢炸搜规律压缩...原创 2020-07-28 12:00:37 · 157 阅读 · 0 评论 -
数据结构——队列
队列的基本概念定义:队列是一种受限线性结构,只允许一端进入一端出去,先进先出。基本描述队头:允许删除的一端队尾:允许插入的一端空队列:为空的队列入队:从队尾插入元素队列出队:从队出队删除元素、基本操作InitQueue(&Q):队列初始化,创造一个空队列。QueueElemtype(Q):判断队列是否为空。EnQueue(&Q):入队DnQueue(&Q):出队GetHead(Q)检查队头元素。队列的存储机构结构体定义#define MaxSize 5原创 2020-07-28 11:33:05 · 240 阅读 · 1 评论 -
数据结构——栈
栈的概念定义:栈是一种受限线性表,只允许在插入端进行插入与删除。通用语言栈顶:只允许删除和插入的一端。栈底:固定的不允许删除和插入的一端。空栈:没有任何数据的一端。入栈:向栈中插入元素。出栈:向栈中删除元素。n个元素入栈,出栈的序列,有1/(n+1)*c(n,2n)个出栈组合。基本操作InitStack(&S):初始化一个空栈。StackEmpty(S):判断一个栈是否为空,为空返回true,不为空返回false。Push(&S,x):入栈Pop(&S,x)原创 2020-07-25 16:00:30 · 307 阅读 · 0 评论 -
数据结构——排序
直接插入排序从第二个元素开始和前面一个元素比较,如果元素大小小于前面一个元素,则前面一个元素后退一格,直到前面的元素小于此元素则停止后退并插入该元素,从第二个元素开始到最后一个元素循环操作则完成排序时间复杂度为O(n^2)空间复杂度为O(1) 使用了一个A哨兵;适合顺序存储和链式存储,稳定性为稳定。//直排void insertsort(ElemType A[],int n){ int j,i; for(i=2;i<n;i++){ A[0]=A[i]; for(j=原创 2020-07-17 17:03:45 · 169 阅读 · 0 评论 -
数据结构——链表
单链表定义通过一组任意的存储单元来存储线性表中的数据元素,为了建立数据元素之间的线性关系,对于每个链表的结点,除了存放数据以外,还要存放一个指向后继元素的指针结构体模型typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList;单链表解决了顺序表需要大量连续存储单元的缺点,但是单链表附加指针域,也存在浪费空间的缺点。为了操作方便通常会在第一个节点之前添加一个节点,称为头节点,头节点的数据域可以不设置任何原创 2020-06-11 17:25:32 · 235 阅读 · 0 评论 -
数据结构——顺序表
线性表线性表定义和基本操作定义线性表是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。线性表的特点:元素的个数有限,表中元素具有逻辑上的顺序性,表中元素有其先后次序,表中元素都是数据元素,每个元素都是单个元素,表中元素的数据类型相同,这意味着每个元素占有相同大小的储存空间。基本操作InitList(&L),初始化线性表。Length(L):求表长。LocateElem(L,e):按置查找,e为查找的值GetELem(L,i):按原创 2020-06-08 21:56:22 · 940 阅读 · 0 评论 -
数据结构绪论
绪论数据结构的三要素数据的逻辑结构:数据的存储结构:顺序存储:可以实现随机存取,每个元素占用最少的存储空间,可能产生较多的外部碎片。链式存储:不会出现碎片现象,但只能实现顺序存取。索引存储:检索速度快,但附加的索引表会额外占用储存空间,实现修改索引表也会花较多的时间。散列存储:又称哈希存储,检索,增加,删除都很快,但是如果散列函数不好会出现储存单元冲突数据的运算通过逻辑结构和存储结构实现的算法。例题两种不同的数据结构,逻辑结构和存储结构一定不同吗?答:不一定,数据的运算也是数据结构原创 2020-06-07 16:00:00 · 201 阅读 · 0 评论