随笔分类 - 数据结构与算法学习之旅
摘要:一、性能分析: 若有n条记录,记录最多含有a个关键字,每个关键字的基数取值范围为b个值,则: 1.平均时间复杂度 = O(a(n + b)) 2.空间复杂度:O(ab) 二、实现: 1 #define INDEX 10 //关键字基数,此时是十进制整数的基数 2 #define KEYNUM 2 /
阅读全文
摘要:1.时间复杂度:O(nlog2n) 2.空间复杂度:O(n) 3.实现: 1 void MergeSort(int* a, int n) { 2 int* b = (int*)calloc(n + 1, sizeof(int));//创建a的备份b 3 MSort(a, b, 1, n); 4 fr
阅读全文
摘要:一、简单选择排序(Simple Selection Sort) 1.时间复杂度:O(n2) 2.空间复杂度:O(1) 3.实现: 1 void SelectSort(int* a, int n) { 2 int i, j, min; 3 for (i = 1; i < n; i++) { 4 for
阅读全文
摘要:一、冒泡排序(Bubble Sort) 1.时间复杂度:O(n2) 2.空间复杂度:O(1) 1 void BubbleSort(int* a, int num) { 2 int i, j; 3 for (i = 1; i <= num - 1; ++i) { 4 for (j = 1; j <=
阅读全文
摘要:一、直接插入排序(Straight Insertion Sort) 1.时间复杂度:O(n2) 2.空间复杂度:O(1) 3.实现: 1 void InsertSort(int* a, int num) { 2 int i, j; 3 for (i = 2; i < num; i++) { 4 if
阅读全文
摘要:1.和次优查找树相对,二叉排序树是一种动态树表。 2.二叉排序树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。 3.含有n条记录的二叉查找树平均查找长度: 4.实现: 二叉排序树的查找 1 int SearchBST(BTree T, BTree* P,
阅读全文
摘要:一、顺序查找 1.若有等概率的n条记录,则查找成功时的平均查找长度: ASL = ( n + 1 ) / 2; 2.设置监视哨(把查找表下标为0的位置设置为待查找的关键字),目的在于免去每一步都要检测整个表是否查找完毕。 3.实现: 1 int SequentialSearch(SSTable T,
阅读全文
摘要:递推公式: 1.Dist(0)[i][j] = weight[i][j] 2.Dist(n)[i][j] = Min( Dist(n-1)[i][j] , Dist(n-1)[i][n] + Dist(n-1)[n][j] ) Floyd函数: 1 void Floyd(AdjMatrix* G,
阅读全文
摘要:Dijkstra函数: 1 //Dist[MAXVEX],各顶点最短路径长度 2 //Path[MAXVEX][MAXVEX],若Path[i][j] = 1, 则 j 是从源点到 i 间最短路径上的顶点 3 void Dijkstra(AdjMatrix* G, int start, int Di
阅读全文
摘要:事件 事件最早发生时间(ve) 事件最晚发生时间(vl) 活动 活动最早开始时间(ee) 活动最晚开始时间(el) el - ee A 0 0 (A,B) 0 1 1 B 3 4 (A,C) 0 0 0 C 2 2 (A,D) 3 4 1 D 6 6 (B,E) 3 4 1 E 6 7 (C,D)
阅读全文
摘要:拓扑排序步骤: 1.在有向图中选一个没有前驱的顶点且输出之。 2.从图中删除该顶点和所有以它为尾的弧。 思考: 1.采用图的十字链表存储结构,可以方便的查找结点的出度和入度。 2.拓扑排序不唯一。 实现: 1 void TopoSort(OLGraph G) 2 { 3 int i = 0; 4 i
阅读全文
摘要:问题描述: 在使用visual studio 2022 communicaty 中调用了graphics.h 库文件,结果编译时出现: 分析: 因VS不同版本之间对stdin,stdout,stder的定义不同,导致不同VS版本之间无法正确的调用函数。 解决办法: 增加转换函数 1 extern "
阅读全文
摘要:全局变量 1 static int count = 0; 2 static int low[MAXVEX] = { 0 };/*存放结点及其子孙的回边指向的最大祖先结点*/ 3 static int visited[MAXVEX] = { 0 }; FindArticul函数 1 /*连通图G以邻接
阅读全文
摘要:1 /********************************************************* 2 * Name: Kruskal算法构造最小生成树 3 * Date: 2022.01.26 4 * Author: 吕辉 5 * Description: 给定无向网,通过K
阅读全文
摘要:Prim函数 1 /*********************************************************** 2 * Name: Prim 3 * Called By: main 4 * Parameter: G 无向网, start 起始顶点下标 5 * Descri
阅读全文
摘要:全局变量 int visited[MAXVEX] = { 0 };/*访问标志数组*/ BFSTraverse函数 1 /*************************************************** 2 * Name: BFSTraverse 3 * Call: BFS 4
阅读全文
摘要:全局变量 int visited[MAXVEX] = { 0 };/*访问标志数组*/ DFSTraverse函数 1 void DFSTraverse(AdjList* G) 2 { 3 int i = 1; 4 for (i = 1; i <= G->vexnum; i++) 5 { 6 if
阅读全文
摘要:邻接多重表(无向图)的抽象数据结构 1 #define MAXVEX 20/*最大顶点数*/ 2 typedef struct ArcNode 3 { 4 int mark;/*访问标记*/ 5 int ivex;/*该边依附的顶点的位置*/ 6 int jvex; 7 struct ArcNode
阅读全文
摘要:free()函数用来释放一个指针指向的地址的内容。 若指针指向一个存储了数据的单元,使用free函数会清空该存储单元的内容。 若指向的是申请的内存空间,并且该内存空间已经使用,此时free会导致该内存空间存储的内容全部丢失。 在使用free前请确保该指针指向的内容已经不被使用。
阅读全文
摘要:十字链表(有向图)的抽象数据结构 1 #define MAXVEX 20 2 typedef struct ArcNode 3 { 4 int tailvex; 5 int headvex; 6 struct ArcNode* fristin;//弧头相同的弧的链域 7 struct ArcNode
阅读全文

浙公网安备 33010602011771号