随笔分类 -  数据结构(C语言实现)

1
摘要:一、关键路径算法 关键路径算法是在工程能完成的情况下找出关键的几个活动,达到工程更早完成的效果。 二、算法分析 这个算法中我们需要用到etv,ltv,ete,lte这几个变量,还需要用到确保工程能完成的算法,也就是拓扑排序算法 在这个算法中我们把顶点看作是事件,边权看作是活动持续时间,边看作是活动 阅读全文
posted @ 2022-02-04 15:36 scannerkk 阅读(1375) 评论(0) 推荐(0) 编辑
摘要:一、拓扑排序(TopologicalSort) 所谓拓扑排序,就是指在一个有向无环图中,每个顶点都有出现的顺序,然后使得每个顶点都能出现。这里顶点可以看成是一个活动。 比如说我们要准备学校的运动会 首先我们要干嘛。。。 其次我们才能干嘛。。 。。。。。。。。。。 。。。。。。。。。。 最后我们才能干 阅读全文
posted @ 2022-02-01 21:50 scannerkk 阅读(749) 评论(0) 推荐(0) 编辑
摘要:一、最短路径算法 1.Dijkstra(迪杰特斯拉)也叫作单源最短路径算法 2.Floyd(弗洛伊德)是个多源最短路径算法 二、Dijkstra算法(采用贪心思想) 1.产生 当我们要计算两个确定的点之间的最小成本的时候,我们就能用到这个算法,比如说我们要从长沙去到北京,可以直达,也可以转车,但是你 阅读全文
posted @ 2022-02-01 21:41 scannerkk 阅读(114) 评论(0) 推荐(0) 编辑
摘要:一、Prim算法 Prim算法时间复杂度为O(n ^ 2) Prim算法的具体思路是,每次根据最小那条边的顶点松弛边,然后再根据dis数组继续松弛,一直到n-1条边数完。 优化后的时间复杂度为O(nlogn) 1 #include "bits/stdc++.h" 2 using namespace 阅读全文
posted @ 2022-01-30 14:46 scannerkk 阅读(258) 评论(0) 推荐(0) 编辑
摘要:一、Segment_tree 1.什么是线段树? 其实就是以类似于数组的形式存储了一些有关的信息,比如一段区间的和,一段区间的最大值最小值之类的问题 2.为什么需要线段树呢? 当我们需要查询某个区间的最大值最小值的时候我们需要扫一遍查询的区间,而当我们查询的次数为n次时,时间复杂度趋于O(n^2)。 阅读全文
posted @ 2022-01-28 21:59 scannerkk 阅读(49) 评论(0) 推荐(0) 编辑
摘要:一、邻接表 1.为什么需要邻接表? 答:当遇到的是稀疏图的情况下如果用邻接矩阵去存储的话,时间复杂度会是O(n^2),空间复杂度也会是O(n^2),其实这样是非常划不来的,因为你有很多空间没有用掉,所以就有了邻接表的存储方式 2.邻接表是什么? 答:可以把它当做一个链表来看待,他就是利用指向的形式寻 阅读全文
posted @ 2022-01-28 19:28 scannerkk 阅读(916) 评论(0) 推荐(0) 编辑
摘要:一、AVL树简介 AVL树是一棵自平衡的二叉搜索树,前篇讲过了BST(二叉搜索树),那为什么还需要AVL树呢,因为BST有个缺点,如果我插入的值是单调递增或递减,那么这棵树就会退化成一条链表,有个专业术语也叫作斜树,这会导致原来logn的搜索插入效率变成O(n),为了防止这种退化,就产生了AVL树, 阅读全文
posted @ 2022-01-21 20:07 scannerkk 阅读(790) 评论(0) 推荐(0) 编辑
摘要:一、前言 BST及(BinarySearchTree)二叉查找树,TBT及(ThreadedBinaryTree)线索二叉树。二叉查找树在一定程度上能使查找某个数字从线性变成对数级的时间复杂度,但一定程度上也会失效。线索二叉树是利用空余的指针为二叉树建立一个线性阶的查找,能很快的知道某个节点的前驱和 阅读全文
posted @ 2022-01-20 13:49 scannerkk 阅读(153) 评论(0) 推荐(0) 编辑
摘要:一、二叉树重构 二叉树重构指的是通过前序和中序,或者中序和后序重新构造出二叉树。 二、中序和前序构造二叉树 给出两个序列: 前序:CBADEFGH 中序:ABEDFCHG 怎么推出后序呢? 首先我们知道前序的遍历顺序是 根左右 中序的遍历顺序是 左根右 因此前序的第一个就是整根数的根节点 然后去中序 阅读全文
posted @ 2022-01-17 22:26 scannerkk 阅读(453) 评论(0) 推荐(0) 编辑
摘要:一、前言 今天学习了下二叉树的构建以及遍历,感觉还是挺简单的。 二、树的构建 我们利用输入的字符串,依次是从根节点到左儿子再到右儿子,也就是根据字符如果不是'#'就创建节点返回,如果是,再创建它的左右节点,依次结束树的创建。 比如说我们输入一串字符串“AB#D##C##”(#代表空) 它的树图为: 阅读全文
posted @ 2022-01-15 21:07 scannerkk 阅读(132) 评论(0) 推荐(0) 编辑
摘要:一、描述: BF、KMP、GKMP(优化后的kmp)都是基于单个字符串(多个字符串一般要用到其他算法,比如说AC自动机)匹配的算法,不过时间复杂度各有不同,其中BF的时间复杂度为O(n * (m - n + 1)),而kmp算法的时间复杂度为O(n + m),可见快上了不少,但是这其中确实还是有不足 阅读全文
posted @ 2022-01-13 17:05 scannerkk 阅读(365) 评论(0) 推荐(0) 编辑
摘要:1 #include "bits/stdc++.h" 2 #include "conio.h" 3 #include "windows.h" 4 using namespace std; 5 typedef struct node{ 6 char name[100];//姓名 7 char phon 阅读全文
posted @ 2022-01-12 18:11 scannerkk 阅读(138) 评论(0) 推荐(0) 编辑
摘要:1 #include <stdio.h> 2 struct stack{ 3 int top; 4 int data[100]; 5 }; 6 struct queue{ 7 int head; 8 int tail; 9 int paper[1000]; 10 }; 11 int book[10] 阅读全文
posted @ 2022-01-12 16:44 scannerkk 阅读(84) 评论(0) 推荐(0) 编辑
摘要:1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "string.h" 4 typedef struct Candidates{//创建候选人结构 5 char name[20];//投票人姓名 6 int vote;//投票数 7 stru 阅读全文
posted @ 2022-01-12 16:42 scannerkk 阅读(36) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h> #include <stdlib.h> typedef struct Node { int val; struct Node *next; }Node,*PNode; typedef struct Stack { struct Node *top; struct 阅读全文
posted @ 2022-01-12 16:40 scannerkk 阅读(25) 评论(0) 推荐(0) 编辑
摘要:1 #include "stdio.h" 2 #include "string.h" 3 int que[100];//定义队列 4 char Ask[100];//定义询问串 5 void pop(int *front,int *top) 6 { 7 if(*front == *top){ 8 p 阅读全文
posted @ 2022-01-12 16:32 scannerkk 阅读(39) 评论(0) 推荐(0) 编辑
摘要:一.前言: 逆波兰表示法 ( Reverse Polish notation , RPN ,或 逆波兰记法 ),是一种是由 波兰 数学家 扬·武卡谢维奇 1920年引入的数学表达式形式,在逆波兰记法中,所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 (也称后缀表达式)。而我们平常用的a 阅读全文
posted @ 2022-01-12 12:29 scannerkk 阅读(694) 评论(0) 推荐(0) 编辑
摘要:1 #include "stdio.h" 2 struct node{ 3 int data; 4 int next;//下一个的指针 5 }list[100],space[100]; 6 int Listlen = 0; 7 void init() 8 { 9 for(int i = 0;i < 阅读全文
posted @ 2022-01-11 17:55 scannerkk 阅读(46) 评论(0) 推荐(0) 编辑
摘要:一.前言 上一篇随笔提过Ackermann函数了,因此我直接给出栈和队列实现Ackermann函数的代码以及注释 #include "bits/stdc++.h" using namespace std; int ack(int m,int n) { stack <int> s1;//存储每次处理节 阅读全文
posted @ 2021-12-16 21:06 scannerkk 阅读(93) 评论(0) 推荐(0) 编辑
摘要:一.前言: 1.栈是一种先进后出结构的数据结构,栈加入元素是从栈顶加入的,删除元素也是从栈顶删除的; 2.队列是一种先进先出的数据结构,队列加入元素是从队尾加入的,删除元素是从队首删除的; 二.习题练习 (A) 现在有n个元素分别是1,2,3,...,n,我们想知道通过一个栈,在n次push/pop 阅读全文
posted @ 2021-12-15 22:55 scannerkk 阅读(223) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示