数据结构与算法
数据结构与算法
cutlery1137
这个作者很懒,什么都没留下…
展开
-
红黑树插入结点
红黑树原创 2023-02-05 22:09:20 · 325 阅读 · 0 评论 -
DFS判断有向图是否存在环
st数组记录每个点的状态:0表示没访问过,1表示访问过,2表示与该点相邻的点都被访问过。dfs深搜如果遇到被标记成1的点,就说明有环。#include <iostream>using namespace std;const int N = 1010;int g[N][N], n, m, st[N], flag = 1;void dfs(int k) { st[k] = 1; for(int i = 1; i <= n; i++) { if(g[k][i]) { //和原创 2020-11-02 20:50:19 · 3447 阅读 · 0 评论 -
堆排序
采用数组存储二叉堆结构,数组下标从1开始,对于第i个结点,2i是其左孩子,2i+1是其右孩子。设结点总个数为n,若2i > n,则结点i没有左孩子;若2i+1 > n,则结点i没有右孩子。堆排序最重要的是一步是筛选操作,即调用heapAdjust()函数。建立一个堆,是从最后一个非叶子结点(其下标为n / 2向下取整)开始,从下往上依次对每一个结点进行筛选。排序操作是当前堆的最大值(...原创 2020-01-25 17:19:33 · 195 阅读 · 0 评论 -
链队列 & 循环队列
链队列c语言实现:#include <stdio.h>#include <stdlib.h>typedef int Status;typedef int ElemType;typedef struct QNode { ElemType data; struct QNode *next;}QNode, *QueuePtr;typedef struct { ...原创 2020-01-24 23:50:22 · 174 阅读 · 0 评论 -
顺序栈c语言实现
#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef int ElemType;typedef struct { ElemType *base; ElemType *top; in...原创 2020-01-24 23:44:34 · 277 阅读 · 0 评论 -
单链表c语言实现
#include <stdio.h>#include <stdlib.h>typedef int Status;typedef int ElemType;//定义链表类型 typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *Linklist;//初始化一个链表 Status I...原创 2020-01-24 23:01:00 · 240 阅读 · 0 评论 -
顺序表c语言实现
#include <stdio.h>#include <stdlib.h>#define LIST_INIT_SIZE 100#define LISTINCREAMENT 10 typedef int Status;typedef int ElemType;//定义顺序表类型 typedef struct { ElemType *elem; int ...原创 2020-01-24 22:13:49 · 288 阅读 · 0 评论 -
快速排序
最左边的数为基准数,指针i从后往前移动直到找到一个比基准数小的数,然后指针j从前往后移动直到找到一个比基准数大的数,原创 2020-01-23 23:43:09 · 145 阅读 · 0 评论 -
最大公约数 & 最小公倍数
求最大公约数即欧几里得算法,有gcd(a,b)=gcd(b,a%b)。求最小公倍数(lcm),需要先求出最大公约数,有性质a∗b=gcd∗lcm。但注意为了防止溢出一般写为lcm = a / gcd * b 。求gcd代码://递归int gcd(int a, int b) { return b ? gcd(b, a % b) : a;}//循环int gcd(int a, in...原创 2020-01-11 23:41:27 · 202 阅读 · 0 评论 -
求二叉树深度
#include <iostream>using namespace std;typedef struct BiTNode { char data; struct BiTNode *lchild; struct BiTNode *rchild;} BiTNode, *BiTree;void createBiTree(BiTree &T) { char ch; ...原创 2020-01-07 14:41:53 · 333 阅读 · 0 评论 -
顺序查找 & 折半查找
顺序查找#include <iostream>#define MAX 10using namespace std;typedef int ElemType;//建顺序表,下标为0的空间留空 typedef struct { ElemType *elem; int length;} sqList;void init(sqList &L) { L.elem ...原创 2020-01-07 13:47:11 · 206 阅读 · 0 评论 -
直接插入排序
#include <iostream>#define MAX 10using namespace std;typedef int ElemType;typedef struct { ElemType *elem; int length;} sqList;//初始化顺序表 void init(sqList &L) { L.elem = ne...原创 2020-01-03 18:02:07 · 157 阅读 · 0 评论 -
单链表实现选择排序
代码如下:#include <stdio.h>#include <stdlib.h>typedef int Status;typedef int ElemType;//定义链表类型 typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *Linklist;//初始化一个链表 St...原创 2019-12-31 18:16:42 · 891 阅读 · 0 评论 -
最小生成树
prim算法void prim(MGraph G) { int min, i, j, k; int adjvex[MAXVEX]; int lowcost[MAXVEX]; adjvex[0] = 0; lowcost[0] = 0; for(i = 1; i < G.vexnum; i++) { adjvex[i] = 0; lowcost[i] = G.arc[0]...原创 2019-12-29 19:58:33 · 172 阅读 · 0 评论 -
并查集
注意find()函数里的路径压缩,可以极大地提高搜索时间。merge()函数里需要比较两棵树的高度,用rank数组表示,深度小的树作为深度大的树的子树。int par[MAX]; //记录根 int rank[MAX]; //记录树的高度 //并查集初始化 void init(int n) { for(int i = 0; i < n; i++) { par[i] = i;...原创 2019-12-28 17:49:30 · 210 阅读 · 1 评论 -
求无向图的连通分量
利用深度遍历算法实现int getNum(MGraph G) { int i, count = 0; for(i = 0; i < G.vexnum; i++) visited[i] = false; for(i = 0; i < G.vexnum; i++) if(!visited[i]) { cou...原创 2019-12-28 16:57:37 · 574 阅读 · 0 评论 -
广度优先搜索BFS
采用邻接矩阵存储#include <queue>queue <int> q;bool visited[MAXVEX];void BFSTraverse(MGraph G) { int i, j; for(i = 0; i < G.vexnum; i++) visited[i] = false; for(i = 0; i < G.vexnum;...原创 2019-12-28 16:10:05 · 140 阅读 · 0 评论 -
深度优先搜索DFS
采用邻接矩阵存储bool visited[MAXVEX];//深度优先遍历递归算法 void DFS(MGraph G, int i) { int j; visited[i] = true; cout<<G.vexs[i]<<" "; for(j = 0; j < G.vexnum; j++) if(G.arc[i][j] == 1 &...原创 2019-12-28 15:48:38 · 125 阅读 · 0 评论 -
图的存储 -- 邻接矩阵,邻接表
邻接矩阵的定义#define MAXVEX 100#define INFINITY 65535typedef int VertexType; //顶点类型 typedef int EdgeType; //边的权值类型typedef struct { //邻接矩阵 VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int ...原创 2019-12-27 22:42:28 · 195 阅读 · 0 评论 -
求二叉树叶子结点的数目
#include <iostream>using namespace std;typedef char ElemType;typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree;//前序建立二叉树 void createBiTree(BiTre...原创 2019-12-26 18:30:40 · 260 阅读 · 0 评论 -
二叉树的建立与遍历
#include <iostream>using namespace std;typedef char ElemType;typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree;//前序建立二叉树 void createBiTree(BiTre...原创 2019-12-26 17:52:40 · 424 阅读 · 0 评论