算法
卷不过也不想跑路
这个作者很懒,什么都没留下…
展开
-
线性链表的合并
一、将所有在Lb中,不在La中的数据元素插入到La中int LocateElem(List *head,int e){//查找在链表中有没有数据域是e的节点,有的话返回1,否则0 List *p=head->next; while(p){ if(p->data==e) return 1; } return 0;...原创 2020-03-20 16:53:56 · 1921 阅读 · 1 评论 -
栈的定义以及基本操作C语言实现--线性栈和链式栈
栈的定义以及基本操作C语言实现栈本身就是线性表,只不过是操作受限制,数据元素后进后出用顺序表表示栈栈的声明#define InitSize 5#define Elemtype int#define Status int#define OK 1//返回的操作结果,比如某个操作是否成功#definw OVERFLOW -1#define ERROR -1typedef stru...原创 2020-04-05 18:16:09 · 261 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围 go语言
题目要求地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?提示1 <= n,m <= 1000 <= k <= 20go原创 2021-03-07 21:34:05 · 167 阅读 · 0 评论 -
动态规划法 最长公共子串 golang
思想创建数组array[i][j]代表text1中以text[i]为首字母的字符串与text2中以text2[j]为首字母的字符串匹配的最大长度得到递推公式array[i][j]=array[i+1][j+1] (text1[i]==text2[j])array[i][j]=0 (text1[i]!=text2[j])首先处理边界当字符串长度为1的时候,只有text1[i]==text2[j],array[i][j]=1,否则为0代码package mainimport "fmt"f原创 2021-03-19 14:46:44 · 326 阅读 · 0 评论 -
C语言实现Prim算法
C语言实现Prim算法话不多说,思想简单,直接上代码维护两个数组。一个lowcost数组,表示当前已经归入最小生成树的结点集合与未归入的集合节点之间的最小代价;一个visited数组,表示是否已经归入最小生成树每次从lowcost数组中找到未归入最小生成树但代价最小的节点,将之归入最小生成树,之后根据归入的新节点更新lowcost数组直到所有节点全部归入最小生成树,算法结束;下例用未压缩的邻接矩阵存储图话不多说,思想简单,直接上代码#define MAX_VEXNUM 100typedef原创 2021-10-24 21:29:45 · 4850 阅读 · 2 评论 -
拓扑排序 C语言实现---图论
算法思想计算每个节点的入度,每轮输出入度为零的节点,并且将已经输出的节点从图中删除。即,将该节点指向的节点入度减一;在实现上,维护一个入度数组,保存每个节点的入度,每一轮将入度为零的节点入栈(这里用队列也可以,只是作为存储入度为零的节点并且规定他们之间的输出顺序),并将他们指向的节点入度减一。代码实现以邻接矩阵存储图结构为例,代码如下(伪代码,栈或队列需要实现)#define MAX_VEXNUM 100typedef struct{ int vex[MAX_VEXNUM];原创 2021-11-01 18:32:25 · 323 阅读 · 0 评论 -
Floyd算法 C语言实现
算法思想维护一个当前最短举例矩阵lowcost,lowcost[i][j]表示当前从i到j的最短距离,初始为图的邻接矩阵,此后对该矩阵进行n(图中节点的个数)次迭代,第k次迭代的过程为,对lowcost[i][j]进行更新,考虑从节点i到节点j经过第k个节点,距离是否减小,若减小,则更新lowcost矩阵,具体为比较lowcost[i][k]+lowcost[k][j]与lowcost[i][j],并且用path[i][j]将路径保存代码#define MAX_VEXNUM 100typedef s原创 2021-10-29 17:52:03 · 468 阅读 · 0 评论 -
Dijkstra算法 C语言实现---数据结构图论算法
算法思想维护三个数组,一个visited数组,表示是否已经划入最短路径一个lowcost数组,表示从初始节点到达各个节点的最小代价一个path数组,用来存放最短路径,path[i]代表节点i的前驱节点,根据不断寻找前驱节点可以描述整个路径。思想类似于Prim算法,使用贪心的策略,每次从lowcost数组中选择最小值归入最短路径,并且根据已经并入的节点更新lowcost数组,具体细节可见代码。代码使用临界矩阵存储为例,代码如下#define MAX_VEXNUM 100typedef s原创 2021-10-25 22:00:35 · 616 阅读 · 0 评论