![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
一个董憨憨
这个作者很懒,什么都没留下…
展开
-
算法基础系列——序列式容器(一)vector向量
vector向量vector创建库函数对vector的理解vector创建vector<int> s(n);//注意这里生成了n个为0的向量,不要用push_back赋值,直接用下标赋值就行。vector<int> s;//这个就必须用push_back赋值了vector<int> s(7,1);//初始化7个1vector<int> s{1,2,3,4};vector<int> s(a.begin(),a.end()-1)//复制另一原创 2021-08-16 18:33:14 · 152 阅读 · 0 评论 -
算法基础系列——关联式容器 set/multiset
STL标准库(一)set1、set的创建2、set的成员函数1、set的创建#include <iostream>#include <set>using namespace std;//创建方式一:insert()int main(){ set<int> s; s.insert(2); s.insert(3); s.insert(4); set<int>::iterator it; for(it=s.begin();it!=s.en原创 2021-08-16 16:06:27 · 89 阅读 · 0 评论 -
算法基础系列——数学(一)快速幂
快速幂快速幂理解模板代码快速幂理解模板代码给定 n 组 ai,bi,pi,对于每组数据,求出 abmodpa^bmod pabmodp的值。输入格式第一行包含整数 n。接下来 n行,每行包含三个整数 ai,bi,pi。输出格式对于每组数据,输出一个结果,表示 a^bmod p的值。每个结果占一行。数据范围1≤n≤100000,1≤ai,bi,pi≤2×109输入样例:23 2 54 3 9输出样例:41#include <iostream>#inc原创 2021-08-15 17:56:11 · 137 阅读 · 0 评论 -
算法基础系列——一些写法技巧
写法技巧1、for循环中的技巧2、引用&的用法3、输入输出优化1、for循环中的技巧i>=0的写法可以写作~i,因为当-1的二进制表示全是1,取反之后就是0,会终止循环。for(int i=30;~i;--i){ ...}字符串中最后一位是/0可以作为终止条件for(int i=0;str[i];++i){ ...}在java中有for-each的写法,可称为加强for循环for(int i:a){ System.out.println(i);}原创 2021-08-15 12:08:53 · 223 阅读 · 0 评论 -
算法基础系列——排序(二)归并排序
归并排序1、归并排序的理解2、习题2.1、归并排序2.2、逆序对的数量1、归并排序的理解2、习题2.1、归并排序给定你一个长度为 n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n个整数(所有整数均在 1∼109范围内),表示整个数列。输出格式输出共一行,包含 n个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5原创 2021-08-13 14:43:50 · 548 阅读 · 0 评论 -
算法基础系列——排序(一)快速排序
排序1、快速排序1.1、快速排序1.2、第K个数1、快速排序1.1、快速排序给定你一个长度为 n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n个整数(所有整数均在 1∼109范围内),表示整个数列。输出格式输出共一行,包含 n个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5#include <iostrea原创 2021-08-13 12:43:23 · 229 阅读 · 0 评论 -
算法基础系列——字符串(三)字典树
字典树1、字典树的基本介绍2、代码实现2.1 Trie字符串统计1、字典树的基本介绍2、代码实现2.1 Trie字符串统计维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,原创 2021-08-12 16:59:10 · 84 阅读 · 0 评论 -
算法基础系列——字符串(二)前缀函数
前缀函数1、什么是前缀函数2、代码实现2.1、朴素写法2.2、优化写法1、什么是前缀函数我们通常用πππ表示前缀函数2、代码实现2.1、朴素写法使得串下式中的字符串相同,j就是next数组的值。s[0,j]=s[i−j+1,i]s[0,j]=s[i-j+1,i]s[0,j]=s[i−j+1,i]// C++ Versionvector<int> prefix_function(string s) { int n = (int)s.length(); vector原创 2021-08-12 12:09:48 · 1059 阅读 · 0 评论 -
算法基础系列——字符串(一)KMP算法
KMP算法1、KMP算法匹配流程2、代码实现2.1、模式串next数组的生成2.2、KMP匹配过程2.3、完整代码3、问题解决1、KMP算法匹配流程串的下标从1开始,i从1开始,j从0开始。2、代码实现2.1、模式串next数组的生成next数组的生成方式是自己和自己匹配生成的 for(int j=0,i=2;i<=n;i++){ while(j&&p[i]!=p[j+1])j=ne[j];//j变小至归零时,停止循环 if原创 2021-08-12 11:37:13 · 272 阅读 · 1 评论 -
算法基础系列——二分法
算法基础系列——二分法概念与理解模板以左侧为参考以右侧为参考例题1、数的范围概念与理解二分法可以理解为,使用折半的方式找到第一个满足条件的解的方法。常见的题型有整数二分和实数二分。以整数二分为例进行先看一段代码void binary(int start,int end){ while(start<=end) { int mid=(start+end)+1>>1; if(check(mid)) start=mid; else end=mid-1; }}原创 2021-08-02 19:06:53 · 487 阅读 · 0 评论 -
迷宫求解C语言栈实现
迷宫求解核心代码解析栈中存放的数据可以理解为上一个可以通行的格子,因为在递归的时候当一个格子遇到能通行的方向的时候就不再尝试其他方向了,所以当一个格子弹出的时候,就意味着回到了弹出的这个坐标上边。bool findPath(Maze* maze, ArrList pArr) { direct[0].incX = 0; direct[0].incY = 1; direct[1].incX = 1; direct[1].incY = 0; direct[2].incX = 0原创 2021-04-25 21:02:05 · 915 阅读 · 1 评论 -
数据结构与算法(七)排序c语言实现
数据结构与算法(七)排序直接插入排序void DInsertSort(SqList* Sq)//直接插入排序{ int i, j; for (i = 2; i <= Sq->length; ++i) { Sq->r[0].key = Sq->r[i].key; for (j = i-1; Sq->r[0].key<Sq->r[j].key; j--) { Sq->r[j + 1].key = Sq->r[j].key;原创 2021-02-16 17:18:01 · 170 阅读 · 0 评论 -
数据结构与算法(六)查找 c语言实现
数据结构与算法(六)查找静态查找表#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAX 20typedef struct { int key;}ElemType;typedef struct{ ElemType r[MAX]; int length;}STable;STable* initList(int n){ STable* st = (ST原创 2021-02-15 17:35:21 · 294 阅读 · 0 评论 -
数据结构与算法(五)图c语言实现(带源码)
数据结构与算法(五)图邻接矩阵存储实现、深度优先及广度优先遍历#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#define MAX 100#define MAXNUM 32767//正无穷typedef struct{ char vexs[MAX];//顶点表 (顶点类型是char) int arcs[MAX][MAX];//邻原创 2021-02-11 11:39:35 · 488 阅读 · 0 评论 -
数据结构与算法(四)树C语言实现(带源码)
数据结构与算法(四)树二叉树的顺序存储及遍历#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct node{ char data; struct node* lchild, * rchild;}NODE,*PNODE;PNODE initTree(){//此处会造成内存泄漏,可以改为数组然后free,这样写会更清晰些。 PNODE node0 = (原创 2021-02-10 22:32:04 · 118 阅读 · 0 评论 -
数据结构与算法(三)串c语言实现(带源码)
数据结构与算法(三)串串的顺序实现/*插入有些问题,还请大佬指正*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 20typedef struct{ char ch[MAX]; int last;}SeqString;void init_String(SeqString* pS){ int i = 0; pS->last = 0; pr原创 2021-02-10 22:08:07 · 336 阅读 · 0 评论 -
数据结构与算法(二)栈和队列c语言实现
数据结构与算法(二)栈和队列栈的顺序实现#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct Arr{ int* pBase; int len;//数组长度 int top;//栈顶指针}Arr;void init_arr(Arr*, int);bool push(Arr*, int);bool insert_arr(Arr*, int, int);原创 2021-02-10 12:14:13 · 259 阅读 · 0 评论 -
数据结构与算法(一)线性表c语言实现(带源码)
数据结构与算法(一)线性表#系列开篇自学数据结构小白一名,根据能力持续更新,单纯学习分享贴。本系列适合刚入门的小白参考,大佬轻喷。开始学习时看了很多的书都没有完整的代码,由于太菜连伪代码也无法实现,如果有和我类似的朋友们可以来看看。话少,必要时有描述,一般直接上代码。线性表的顺序实现#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct Arr{ int* pBas原创 2021-02-05 10:49:37 · 691 阅读 · 0 评论