
数据结构
不哭的超人
愿你孤独的努力终有回报,愿你前行的路上有人相伴。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链式栈
void initStack(LinkStack *s);//对栈进行初始化bool stackEmpty(LinkStack *s);//判断栈是否为空int push(LinkStack *s,DataType e);//压栈void clearStack(LinkStack *s);//将栈中所有的元素删除int getTop(LinkStack *s,DataType *e);//...原创 2020-10-19 15:32:17 · 451 阅读 · 0 评论 -
稀疏矩阵转置
#include <stdio.h>#define MAX 1000000typedef struct node{ int r; //行 int c; //列 int v; //元素的值 }node;/*第一个元素用来存储在当时矩阵的行与列 */node a[MAX]; //转换之间的顺序 node b[MAX]; //转换之事的顺序 voi...原创 2019-04-17 17:08:20 · 339 阅读 · 0 评论 -
稀疏矩阵的十字链表存储
https://bbs.csdn.net/topics/370157573这道题我就是对这个地方不理解,看了这个帖子,似乎领悟了写下我自己的想法。稀疏矩阵的十字链表存储,本来就是每一行形成一个链表、每一列形成一个链表(此时是指向node的,也就是node),而每一列或者每一行的链表都有都一个结点,这样结点又构成了一个新的链表(是指向node,也就是**node)假如这样,一级指针stru...原创 2019-04-23 14:39:25 · 569 阅读 · 0 评论 -
矩阵相乘
#include <stdio.h>int a[205][205];int b[205][205];int c[205][205]; int main(){ int i,j,k; int m,r,n; scanf("%d %d",&m,&r); //输入a的矩阵 for(i = 0;i < m;i++){ for(j = 0;j <...原创 2019-04-19 20:05:24 · 691 阅读 · 0 评论 -
线索二叉树
#include <stdio.h>#include <malloc.h>typedef struct BiTNode{ char data; struct BiTNode *lchild; struct BiTNode *rchild; int ltag; int rtag;}BiTNode,*BiTree;char str[105];int k =...原创 2019-05-07 15:33:07 · 179 阅读 · 0 评论 -
最小生成树
题目我就不说了,最小生成树有两种算法,我先写这种保证图中只有一个连通分量prim,这个视频挺好的,多看几遍,然后自己再琢磨琢磨就差不多会了。最小生成树我按照自己的想法说一下吧,这个好像有点类似于贪心先确定一个点,然后找到与这个点相连接的点,将它们的值都保存在一个数组dis中,然后从这里找一个最短的,用sum加的,然后从这个最短的点再向周围寻找 一个最短的,将靠近的点都保存在dis中,假...原创 2019-05-15 12:10:03 · 326 阅读 · 0 评论 -
迪杰斯特拉最短路径算法(Dijkstra)
题目就不多说了,可以用这个算法演示一遍,Dijkstra我感觉这个和prim还是有点相似之处的,关键这里多了一个记录上次最短路径的和p,光看代码没用,要知道思想#include <stdio.h>#define MAX_SIZE 55#define INF 0xFFFFFFint G[MAX_SIZE][MAX_SIZE];int vis[MAX_SIZE];int n...原创 2019-05-15 18:59:54 · 455 阅读 · 0 评论 -
Floyd算法
Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我们假设f(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查f(AX) + f(XB) < f(AB)是否成立,如果成立,证明从A到X再到B的路径比A直接到B的路径短,我们便设置f(AB) = f(AX) + f(XB),这样一来,当我们遍历...原创 2019-05-15 23:25:55 · 327 阅读 · 0 评论 -
P3372 【模板】线段树 1
题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某区间每一个数的和输入输出格式输入格式:第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3或4个整数,表示一个操作,具体如下:操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加...原创 2019-05-16 20:34:11 · 344 阅读 · 0 评论 -
图论
连通图:无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。原创 2019-06-22 16:53:28 · 1224 阅读 · 0 评论 -
P3374 【模板】树状数组 1
题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某一个数加上x2.求出某区间每一个数的和输入输出格式输入格式:第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3个整数,表示一个操作,具体如下:操作1: 格式:1 x k 含义:将第x个数加上k操作2: 格式:2 x...原创 2019-06-30 16:23:14 · 254 阅读 · 0 评论 -
Super Mario(POJ4417)
Problem DescriptionMario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. W...原创 2020-10-19 15:36:44 · 228 阅读 · 0 评论 -
Wormholes(POJ3259)
DescriptionWhile exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a...原创 2019-07-30 10:10:36 · 172 阅读 · 0 评论 -
P3369 【模板】普通平衡树
题目描述您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入xx数删除xx数(若有多个相同的数,因只删除一个)查询xx数的排名(排名定义为比当前数小的数的个数+1+1。若有多个相同的数,因输出最小的排名)查询排名为xx的数求xx的前驱(前驱定义为小于xx,且最大的数)求xx的后继(后继定义为大于xx,且最小的数)输入格式第一行为nn,表示操作的个数,下...原创 2020-10-19 15:36:16 · 222 阅读 · 0 评论 -
P3384 【模板】树链剖分
题目描述如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和操作3: 格式: 3 x z 表示将以x为根节点的子树内所有节点值都加上z操作4: 格式: 4 x 表示求以x为根节点的子树内所有节点...原创 2020-10-19 15:41:47 · 171 阅读 · 0 评论 -
P3375 【模板】KMP字符串匹配
题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)输入输出格式输入格式:第一行为一个字符串,即为s1第二行为一个字符串,即为s2输出格式:若干行,每行包含一个整数,表示s2在s1中出现的位置接下来1行...原创 2020-10-19 15:28:07 · 162 阅读 · 0 评论 -
汉诺塔
我理解的还不是很透彻#include <stdio.h>int k = 1;void move(char a,char b){ printf("%2d. Move disk from %c to %c\n",k++,a,b);}void hanoi(int n,char x,char y,char z){ if(n == 1) move(x,z); //当n为1...原创 2019-04-12 15:15:27 · 151 阅读 · 0 评论 -
顺序栈
对顺序栈的一些操作void initStack(SeqList *s);//对栈进行初始化void clearStack(SeqList *s);//对栈中的元素进行清除bool stackEmpty(SeqList *s);//判断栈是否为空bool stackFull(SeqList *s);//判断是否栈满int push(SeqList *s,DataType e);//压栈b...原创 2019-03-14 00:07:10 · 515 阅读 · 0 评论 -
顺序队列(循环)
队列的存储结构对循环队列的操作void initQueue(SeqQueue *q);//栈的初始化void clearQueue(SeqQueue *q);//清除队中所有的元素bool queueEmpty(SeqQueue *q);//判断队是否为空bool queueFull(SeqQueue *q);//判断是否队满int getQueue(SeqQueue *q,DataT...原创 2020-10-19 15:32:22 · 484 阅读 · 0 评论 -
线性表
void initList(SeqList *list);//初始化void initList(SeqList *list)//初始化{ list->nLength = 0;}bool listEmpty(SeqList *list); //判断是否为空表bool listEmpty(SeqList *list)//判断是否为空表 { return list->nLe...原创 2019-03-13 12:57:55 · 325 阅读 · 0 评论 -
链式队列
链式队列的一些操作void enQueue(LinkQueue *q,DataType e);//入队void initQueue(LinkQueue *q);//初始化bool QueueEmpty(LinkQueue *q);//判断队列是否为空void clearQueue(LinkQueue *q);//清除队列所有元素int queueLength(LinkQueue *q);...原创 2019-03-25 18:25:44 · 290 阅读 · 0 评论 -
二叉树
二叉树 1、是n(n>=0)个结点的有限集合 2、当n=0时,称为空树 3、在任意一棵非空树中, 有且 仅有一个根结点 当n>1时,除根结点外的其余结点可分为左子树和右子树二叉树的特点 1、每个结点可以 没有子树 一棵子树:左子树或右子树 两棵子树:左子树和右子...原创 2020-10-19 15:32:34 · 182 阅读 · 0 评论 -
图
图多对多的数据结构由顶点 的非空集合和顶点之间边的集合组成表示为G(V,E),G表示图,V表示图中顶点集合,E表示边的集合数据元素在图中,称为顶点数据元素集合在图中,不能没有顶点,即顶点集合不能为空数据元素之间的关系在图中称为边的关系,边的集合可以为空图的种类:一1、无向边,若两个顶点之间的边没有方向,记作(vi,vj)或(vj,vi)2、无向图,图中任意两个顶点之间的...原创 2019-03-30 14:56:06 · 418 阅读 · 0 评论 -
图的邻接矩阵深度优先搜素
#include <bits/stdc++.h>#define VSIZE 100int visitde[VSIZE];typedef int VType; //顶点数据类型 typedef int EType; //边的数据类型 typedef struct AdjMGrahp{ VType vexs[VSIZE]; EType arc[VSIZE][VSIZE]; ...原创 2020-10-19 15:32:40 · 244 阅读 · 0 评论 -
串
(char *)realloc(s1->data,(len1+len2+1)*sizeof(char));realloc在原来的基础上还可以开辟空间对串的一些操作void initString(String *S,char *str);//初始化void destroyString(String *S);//销毁串void chearString(String *S);//清空串...原创 2019-03-27 14:32:00 · 291 阅读 · 0 评论 -
数据结构
1、线性表2、顺序栈3、链式栈4、顺序队列(循环)5、链式队列6、串原创 2019-03-27 14:38:16 · 115 阅读 · 0 评论 -
图的邻接表的深度优先搜索
#include <bits/stdc++.h>#define VSIZE 100typedef int VType;typedef bool EType;int visited[VSIZE];//对这个结点是否访问先进判断,为0则的没被访问,为1则是被访问过 typedef struct ENode{ //边链表结点 int v;//顶点下标 struct EN...原创 2020-10-19 15:32:45 · 268 阅读 · 0 评论 -
静态链表
看了一条题目静态链表所心去了一下静态链表。这个我以前没学过。设有MAXSIZEz个结点第一个结点用来存储第一个备用结点的下标。最后一个结点用来存储这个链表第一个元素的下标,相当于头指针下面代码中的注释是我对静态链表的理解#include <stdio.h>#define MAXSIZE 10typedef int DataType;typedef struct nod...原创 2019-04-06 16:30:49 · 676 阅读 · 0 评论 -
图的邻接矩阵广度优先搜素
#include <bits/stdc++.h>#include <queue>#define VSIZE 100using namespace std;typedef int VType; //顶点数据类型 typedef int EType; //边的数据类型 typedef struct AdjMGraph{ ...原创 2020-10-19 15:29:05 · 201 阅读 · 0 评论 -
图的邻接表广度优先搜索
#include <bits/stdc++.h>#define VSIZE 100using namespace std;typedef int VType;typedef struct ENode{ //边链表结点 int v;//定义下标 struct ENode *next;//下一个顶点的指针 }ENode;typedef struct VNode{ //...原创 2020-10-19 15:28:13 · 661 阅读 · 0 评论 -
树
树一对多的数据结构是n(n>=0)个结点 的有限集当n=0时,称为空树在任意一棵非空树中 有且仅有一个根结点 当n>1时,除根结点外的其余结点可分为m(m>0)棵互不相交的子树树的概念结点:包含数据元素及指向子树的指针结点的度:结点拥有子树的个数树的度:树中所有结点度的最大值结点的关系: 双亲结点 孩子结点 兄弟结点结点的分类: 根结...原创 2019-03-28 16:48:58 · 111 阅读 · 0 评论 -
Balanced Lineup(POJ3264)(RMQ)
DescriptionFor the daily milking, Farmer John’s N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To ...原创 2020-10-19 15:40:59 · 249 阅读 · 0 评论