
数据结构与算法
文章平均质量分 65
数据结构与算法个人学习总结
追随光、成为光
这个作者很懒,什么都没留下…
展开
-
数据结构之图
图的存储邻接矩阵存储存储实现#define MaxVertexNum 100 //结点数typedef char VertexType;typedef int ElemType;typedef struct{ VertexType Vex[MaxVertexNum];//顶点表 ElemType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表 int vexnum,arcnum;//结点数 边数}MGraph;原创 2021-12-16 10:22:11 · 1232 阅读 · 0 评论 -
数据结构之顺性表
链表定义typedef struct node{ int data; struct node * next;}LinkNode,*LinkList;初始化链表带头结点bool InitList(LinkList &L){ L = (LinkNode*)malloc(sizeof(LinkNode)); if(L == NULL) return false; //内存不足,分配失败 L->next = NULL;原创 2021-07-14 22:18:23 · 426 阅读 · 0 评论 -
数据结构之串
串的顺序存储串的定义//静态数组实现typedef struct{ char ch[MAXLEN]; int length; }SString;//动态数组实现typedef struct{ char *ch; int length;}HString;赋值操作bool StrAssign(SString &T,char ch[]){ int chLen = strlen(ch); if(chLen >MAXLEN原创 2021-07-22 15:24:17 · 354 阅读 · 0 评论 -
数据结构之栈
顺序栈定义#define MaxSize 10typedef struct{ ElemType data[MaxSize]; int top;}SqStack;初始化void InitStack(SqStack &S){ S.top=-1;}判空bool StackEmpty(SqStack &S){ if(S.top==-1) return true; return false;}入栈原创 2021-07-16 12:29:07 · 158 阅读 · 0 评论 -
数据结构之队列
队列的顺序存储定义#define MaxSize 10typedef struct{ ElemType data[MaxSize]; int front,rear;//队头和队尾指针}SqQueue;初始化void InitQueue(SqQueue &Q){ Q.front=Q.rear = 0;}判空bool QueueEmpty(SqQueue Q){ if(Q.front==Q.rear) r.原创 2021-07-18 12:16:06 · 276 阅读 · 1 评论 -
数据结构之树
二叉树的顺序存储定义从数组中index=1处开始存储。左孩子为2*i,右孩子为2*i+1#define MaxSize 100struct TreeNode{ ElemType value; bool isEmpty;};TreeNode t[MaxSize];对于完全二叉树:对于非完全二叉树:只能通过isEmpty来查看是否有结点初始化void InitTree(TreeNode &t[]){ for(int ...原创 2021-07-24 19:56:19 · 748 阅读 · 2 评论 -
最小生成树
Prim算法算法思路:1.对于所有的点,可以看作两个集合A和B,A中的点都是在最小生成树中的点,B是未加入最小生成树中的点。初始时随机选择一个点加入到A中,更新集合A到其他点的距离。PS:集合A到其他点的距离比较抽象,这里举一个例子。点b是集合B中的一个点,现在更新集合A到b的点的距离,这个距离就是b与集合A中离他最近的那个点的距离。2.每次选出一个离集合A最近的点,加入到集合A中,加上权值,然后更新集合A到其他点的距离。3.更新n-1次就可以找到一个最小生成树了。时间复杂度为:O.原创 2021-06-01 10:09:57 · 292 阅读 · 1 评论 -
分解质因数模板
#include<bits/stdc++.h>using namespace std;int ans[1000];int main(){ int n,cnt; cin>>n; for(int j = 2; j<=n/j; j++) { if(n%j==0) { cnt = 0; while(n%j==0) { .原创 2021-05-29 12:03:17 · 335 阅读 · 0 评论 -
洛谷 P1102 A-B 数对(二分查找)
题目描述出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A - B = C 的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行。第一行,两个整数 N,C第二行,N个整数,作为要求处理的那串数。输出格式一行,表示该串数中包含的满足A - B = CA−B=C的数对的个数。输入输出样例输入 #1复制...原创 2021-04-03 08:50:02 · 979 阅读 · 1 评论 -
二分查找及其变式模板
查找第一个等于k的数int a[maxn];int bin_search(int l,int r,int k){ while(l<r) { int mid = (l+r)/2; if(a[mid]==k) r=mid; else if(a[mid]<k) l=mid+1; else r=mid-1; } if(a[.原创 2021-04-03 08:39:32 · 184 阅读 · 0 评论 -
素数筛法
素数定义质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。素数判断设n为要判断的数。按照定义,判断n是否能被2~n-1中任意一个数整除即可。时间复杂度为O(n)bool prime(int n){ if(n==1) //如果n为1,则n不是素数返回false return false; for(int i = 2; i < n;.原创 2021-03-06 09:42:30 · 215 阅读 · 0 评论 -
字典树模板及例题
Time Limit: 1000MS Memory Limit: 65536KBProblem Description遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在字典中。Input含有多组测试用例。第一行输入n,m (n>=0&&n<=100000&&m>...原创 2019-09-28 18:01:43 · 250 阅读 · 0 评论 -
快速幂及矩阵快速幂——加快运算
为什么需要快速幂呢?在求解n^k的时候如果k比较小,那么我们可以用k个n相乘来求得结果,但是当k比较大的时候,这种朴素求法就很容易超时,这时候我们可以使用快速幂算法求解。在现实生活中,如果让你求2^20次方,你会怎么求?一般我们会这样来求让 2 * 2 = 4,这样就能算出2^2的值了。让 4 * 4 =16,这样就能算出2^4的值了。让16 * 16 = 256,这样就能算出2 ...原创 2019-06-01 22:15:11 · 281 阅读 · 1 评论 -
尺取法及例题
尺取法及例题尺取法:顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。之所以需要掌握这个技巧,是因为尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以尺取法是一种高效的枚举区间的方法,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情...转载 2020-06-20 08:17:28 · 466 阅读 · 0 评论