![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
年少却很低调
云淡风轻,都是一场梦!
展开
-
深度优先搜索(DFS)递归与非递归实现逻辑详解
递归与非递归: 数据结构对于学习编程的人来说是非常重要的,我们在现实生活碰到的各种烦难问题可以用递归来实现,一个递归思想就把问题给简单化了,但是我们都知道递归是非常耗时的,一旦数据量庞大起来,递归次数多了,这个时间是非常恐怖的。所以一般我们都会把一些递归问题给非递归化,来达到某一定的效率。通常递归转化为非递归用到了栈和队列,今天就详解用栈来实现转化的逻辑处理,并且以(01背包为主讲原创 2018-01-07 18:25:49 · 40061 阅读 · 2 评论 -
大数(大数的四则运算)
/* 大数计算(重点)*///大数加法struct bigInteger{ int digit[1000]; int size; int sign;//标识正负 1为正,-1为负 void init() { for(int i=0; i<1000; i++) digit[i] = 0...原创 2019-02-25 20:21:58 · 980 阅读 · 0 评论 -
求幂(二分求幂)
/* 二分求幂*/int power2(int a,int b){ int result; int base;//切分基 if(b == 0) return 1; result = 1,base = a;//初始化最小单元 while(b) { if(b%2 != 0) r...原创 2019-02-25 20:23:09 · 199 阅读 · 0 评论 -
素数筛法
int prime[10001];bool mark[10001];char c[100];//临时存放int primeSize;void init(){ for(int i=0; i<=10000; i++) mark[i] = false; primeSize = 0; for(int i=2; i<=10000; i+...原创 2019-02-25 20:24:22 · 192 阅读 · 0 评论 -
今年暑假不AC?
Problem Description“今年暑假不AC?” “是的。” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。 作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以...原创 2019-02-25 20:28:30 · 306 阅读 · 0 评论 -
图论(DFS和BFS)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:33:51 · 168 阅读 · 0 评论 -
图论(最小生成树,Prim算法和Kruskal算法)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定...原创 2019-03-10 15:35:34 · 816 阅读 · 0 评论 -
图论(最短路径,Dijkstra算法和Floyd算法)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:36:41 · 424 阅读 · 0 评论 -
图论(拓扑排序,检查图是否存在环)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:38:38 · 279 阅读 · 0 评论 -
基于后序遍历(非递归)的一些应用(输出最长路径上的结点,求 p,q最近的公共结点,在二叉树中查找值为x的结点,打印x结点的祖先等)
int maxSize = 1000;//这个是重点//后序遍历非递归,tag标记实现void postOrderTraverse_non_recursion3(Tree T){ int top = 0; int tag[maxSize];//tag标记该结点右分支是否被访问过,只有当该节点的右分支访问过了才能访问根节点 Tree p = T; Tree ...原创 2019-05-16 15:49:38 · 912 阅读 · 1 评论 -
判断是否为完全二叉树,平衡二叉树,二叉排序树
//完全二叉树//判断是否为完全二叉树//思想:采用层次遍历,将所有的结点入队(包括空结点),当遇见空结点时,查看其后面的结点是否有非空结点,//若有非结点,则不是完全二叉树bool isComplete(Tree T){ queue<Tree> Q; Tree p; if(T == NULL) return true; ...原创 2019-05-16 15:53:48 · 1104 阅读 · 0 评论 -
树常考的一些递归算法
//递归统计叶子结点int leaf_count(Tree T){ if(T == NULL) return 0; if(T->lchild == NULL &&T->rchild == NULL)//叶子结点 return 1; return leaf_count(T->lchild)+leaf_...原创 2019-05-16 15:54:34 · 480 阅读 · 0 评论 -
树的高度,宽度
//树的孩子兄弟结点定义typedef struct CSNode{ char data; CSNode *nextchild,*nextsibling;} CSNode,*CSTree;/* 树的一些递归算法一定要知道*///树的高度int Height(CSTree bt){ int hl,hr; if(bt ==NULL)...原创 2019-05-16 15:55:17 · 622 阅读 · 0 评论 -
经典算法---骑士走棋盘
骑士走棋盘 #define SIZE 8int possible(int board[][SIZE],int nexti[],int nextj[],int x,int y);int min_direction(int board[][SIZE],int nexti[],int nextj[],int count);bool travel(int board[][SIZE],i...原创 2019-05-16 15:59:49 · 551 阅读 · 0 评论 -
进制转化(任意进制转化)
/* 任意进制转化*///任意m进制数转化为n进制int main(){ int m,n,temp,a,b; while(scanf("%d%d",&m,&n)!=EOF) { //要转化的数字 scanf("%s",str); a = 0; b = 1; in...原创 2019-02-25 20:19:50 · 176 阅读 · 0 评论 -
通过栈实现简单的四则运算(考研必看代码)
运算规则:计算机首先将计算式转换成后缀码的形式,通过后缀码计算出结果。 eg:2+3*4/6+5 = 9首先将该算式转化成对应的后缀码形式:234*6/+5+ 1.转换规则:数字直接输出 2.碰到字符将符号入栈( 1.定义符号的优先级。 ...原创 2019-02-25 18:49:51 · 982 阅读 · 0 评论 -
三维迷宫问题
思想:与二位迷宫问题处理思想类似,基于一点向空间6个方向进行扩展,通过广度优先搜索来取到最短路径。(下面一图可以清楚解释为什么要用广度优先搜索) 通过该图可以清楚的知道,迷宫的路径可能有多个,多条,广度优先总是从距离近到远进行遍历,所以可以达到搜索出最短路径。/* 3维空间 迷宫问题*/int go[][...原创 2019-02-27 21:07:44 · 1487 阅读 · 1 评论 -
约霍夫问题 链表实现
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;} node;node *create(int n){ node *head,*tail,*pnew; head = (node*)malloc(size...原创 2018-07-30 23:39:23 · 113 阅读 · 0 评论 -
线性表之顺序表示
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define ElemType int//数据元素的数据类型#define LIST_INIT_SIZE 100//线性表储存空间的初始分配量#define LISTINCREMENT 10//线性表储存空间的分配增量typ...原创 2018-07-31 23:06:31 · 152 阅读 · 0 评论 -
在链表中删除所有x元素的结点的递归实现和非递归实现
//用递归删除值为x的节点void Del_X_3(LinkList &L,ElemType x){ NODE *p;//p指向待删除的节点 if(L==NULL) { return; } if(L->data == x) { p = L; L=L->next; ...原创 2018-08-01 23:10:36 · 1061 阅读 · 3 评论 -
将带有头结点链表“就地”逆置,其中“就地”指的是辅助控件的复杂度为O(1)
//将链表就地逆序LinkList Reverse_1(LinkList L){ /*基本思想是采用头插法来实现链表的逆序,这样控件复杂度就降为O(1)了*/ NODE *p,*r; //p为工作指针,r为的后继(防止断链) p = L->next;//从第一个结点开始 p-> L->next = NULL; while(p...原创 2018-08-01 23:23:52 · 227 阅读 · 0 评论 -
将带有头结点的链表逆向输出,但是不改变其原来的结构
将带有头结点的链表逆向输出,但是不改变其原来的结构,则可以联想到递归调用输出//从尾部到头输入单链表的L中的每个结点用递归可以实现void R_Print(LinkList L){ //从尾部到头输入单链表的L中的每个结点用递归可以实现 if(L->next !=NULL) { R_Print(L->next); } ...原创 2018-08-01 23:32:59 · 330 阅读 · 0 评论 -
将带有头结点的链表递增排列
//将单链表的结点重新排序,使其达到递增有序void Sort(LinkList &L){ NODE *p = L->next,*pre; NODE *r = p->next;//r保存*p的后继结点的信息 p->next = NULL;//构造一个只含一个数据结点的有序表 p =r; while(p!=NULL) ...原创 2018-08-01 23:52:57 · 1355 阅读 · 0 评论 -
链表中删除在min和max之间的结点
//删除在min和max之间的结点void RangeDelete(LinkList &L,int mins,int maxs){ NODE *pre = L,*p = L->next; while(p!=NULL) { if(p->data>mins&&p->data<maxs)//找到被删除的结...原创 2018-08-02 23:44:09 · 1703 阅读 · 0 评论 -
两个链表有公共结点
两个链表有公共结点的话,那么该公共节点之后的所有结点都应该重合,既他们的最后一个结点必然重合,在遍历链表时,遍历到第一个公共结点时,到最后的结点的距离是相同的,所以1:先遍历两个链表的长度,并求出链表长度差2:在长链表先遍历长度差个结点后再同时遍历2个链表,直到找到相同的结点,或者一直到遍历结束 //寻找L1和L2的公共结点/*两个链表有公共结点的话,那么该公共节点之后的所...原创 2018-08-02 23:44:59 · 504 阅读 · 0 评论 -
链表中升序删除结点
//升序删除结点void Min_delete(LinkList &L){ LinkList pre,p; while(L->next) { pre = L;//存放最小结点的前驱 p = L->next;//工作指针 while(p->next) { ...原创 2018-08-02 23:45:32 · 171 阅读 · 0 评论 -
将带有头结点的链表分解为两个带有头结点的链表A,B,使其A含有原来链表的奇数位,B为偶数位,保持其相对顺序不变
//将奇数结点放到A,偶数结点放在BLinkList DisCreat_1(LinkList &A){ int i= 0; LinkList B = (LinkList)malloc(sizeof(NODE)); B->next = NULL; LinkList ra = A,rb = B,p; p = A->next; //p...原创 2018-08-02 23:47:59 · 1704 阅读 · 0 评论 -
设C = {a1,b1,a2,b2......,an,bn},采用头结点的hc单链表来存放, 设计一个就地算法,将其拆成 A = {a1,a2....a2} B = {bn,bn-1,...b1}
/*设C = {a1,b1,a2,b2......,an,bn},采用头结点的hc单链表来存放,设计一个就地算法,将其拆成A = {a1,a2....a2} B = {bn,bn-1,...b1}很容易联想到头插法*/LinkList DisCreat_2(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(...原创 2018-08-02 23:48:37 · 4806 阅读 · 0 评论 -
线索二叉树代码详解(与严蔚敏配套的实现)
首先画个简图我们要实现的样子: #include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR -1typedef char TElemType;typedef int Status;//线索存储标志位//Link(0):表示指向左右孩子结点的指针//Thread(1...原创 2018-08-17 23:37:15 · 1878 阅读 · 4 评论 -
二叉树3种遍历算法递归与非递归实现详解
一, 二叉树先序遍历的实现 递归实现void PreOrderTraverse(BiTree T){ if( T ) { VisitF(T->data);//访问根节点 PreOrderTraverse(T->lchild);//递归左子树 PreOrderTraverse(T->r...原创 2018-08-20 23:53:53 · 12373 阅读 · 3 评论 -
spring boot上传图片
一:首先要配置文件存放设置spring: mvc: view: prefix: /WEB-INF/view/ suffix: .jsp #文件映射路径 static-path-pattern: /** datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:my...原创 2019-05-18 14:12:59 · 415 阅读 · 0 评论