
数据结构
周周周周粥
这个作者很懒,什么都没留下…
展开
-
图的应用
图的应用: … 最小生成树:(Minimum-Spanning-Tree, MST) **定义:**设R为G的所有生成树的集合,若T为R中边的权值之和最小的那棵生成树, 则 T 称为 G 的最小生成树。 特点: ①最小生成树不是唯一的,即最小生成树的树形不唯一,R中可能有多个最小生成树。 ②最小生成树的边的权值之和总是唯一的。 ③最小生成树的边数为顶点数减 1。 普里姆(Prim)算法: 算法思想...原创 2019-10-18 23:05:52 · 178 阅读 · 0 评论 -
图的遍历(BFS与DFS)
图的遍历: 广度优先搜索(Breadth-First-Search)(类似树的层序遍历) 基本思想是: 首先访问起始顶点 v,接着由 v 出发,依次访问 v 的各个未访问过的邻接顶点,然后再依次访问所有未被访问过的 邻接顶点,再从这些访问过的顶点出发,再访问它们所有未被访问过的邻接顶点…… 依次类推,直到图中所有顶点都被访问过为止。 类似的思想还将应用于 Dijkstra 单源最短路径算法和 Pr...原创 2019-10-15 10:52:55 · 573 阅读 · 0 评论 -
图结构的存储
图的结构: **图:**图G是由顶点集V和边集E组成。G=(V,E) V={v1,v2…} E={(u,v) …} |E|为边的条数。 图的阶:V={v1,v2…} |V|为顶点的个数也叫做图的阶。 线性表可以为空表,树可以为空树,但图不可以为空图,顶点集一定非空,边集可以为空。 **有向图:**边是顶点的有序对E={<1,2>…} **无向图:**边是顶点的无序对E...原创 2019-10-14 20:29:54 · 360 阅读 · 0 评论 -
散列结构的查找
散列结构的查找: 散列函数:一 个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Address。 冲突:散列函数可能会把两个或两个以上的关键字映射到同一地址。 散列表:根据关键字直接进行访问的数据结构,对散列表的查找的时间复杂度为O(1)。 散列函数的构造: 要求: ①散列函数的定义域必须包括所有的要储存的关键字,而值域范围依赖于散列表的大小或地址范围。 ②散列函数计算...原创 2019-10-14 11:40:44 · 370 阅读 · 0 评论 -
树形结构的查找
树形结构的查找 二叉排序树(Binary Sort Tree)BST 定义:二叉排序树要么是一棵空树 要么是一棵具有如下特性的二叉树:①左子树非空,左子树的关键字都小于根节点的关键字。 ②右子树非空,右子树的关键字都大于根节点的关键字。 ③左右子树本身也是一棵二叉排序树。 对排序二叉树的中序遍历可以得到一个递增的有序序列。 Bsnode*bst_search(bitree T, elemtype ...原创 2019-10-14 09:48:20 · 2761 阅读 · 0 评论 -
线性结构的查找
线性结构的查找 查找操作: ①查找一个数据是否在查找表中。 ②查找一个数据的其他属性。 ③对查找表进行插入与删除操作。(动态查找表) 查找算法的优劣: 平均查找长度ASL。 … 顺序查找法: int search_seq(seq st, elemtype key) { st.elem[0]=key; //哨兵,目的可以不用判断是否越界,使代码简洁。 for(int i=n; st.el...原创 2019-10-13 17:00:19 · 341 阅读 · 0 评论 -
归并排序和基数排序
二路归并排序 将待排序列分为左右两个子序列, 分别递归进行排序。 void mergesort(elemtype A[], int low, int high) { if(low<high) { int mid=(low+high)/2; mergesort(A[],low,mid-1); mergesort(A[],mid+1,high); merge(A[],low,...原创 2019-10-11 14:54:04 · 233 阅读 · 0 评论 -
选择排序
选择排序 简单选择排序 void simpleselect(elemtype A[],int n) { for(i=1; i<=n-1; i++) //需要选择n-1次,找到n-1个最小值 { min=i-1; //初始的最值暂定为i-1 for(j=i; j<=n-1; j++) //从第i个开始遍历剩下的n-i个数 i...原创 2019-10-11 11:22:18 · 157 阅读 · 0 评论 -
交换排序
交换排序 定义:根据两个关键字的比较结果来对换两个关键字在待排序列中的位置 冒泡排序: void bubblesort(elemtype A[], int n)//冒泡排序 { int m,j,flag;// m表示排序趟数,j表示比较次数,flag表示是否发生了交换,即待排序列已有序。 for(m=1; m<=n-1&&flag=1; m++)//排序n-1趟且发生了交...原创 2019-10-09 13:45:26 · 211 阅读 · 0 评论 -
插入排序
插入排序 定义:给定A[n]待排序序列,按关键字下标顺序从小到大,一个一个插入到之前已经按关键字顺序排列好的子序列中。 直接插入排序 void insertsort(elemtype A[],int n)//直接插入排序 { int i,j; //i代表插入的是第几个关键字,j表示最后一个小于该关键字的位置 for(i=2;i<=n;i++)//第一个关键子不需要排序...原创 2019-10-08 20:00:00 · 145 阅读 · 1 评论