数据结构
prrety_girl
嘤嘤嘤,求抱抱举高高
展开
-
树的判定(并查集)
并查集:提供对集合的查找(比如找到树的根节点),和对集合的并操作。初始化为各个原子子集合。可通过压缩路径法对该结构进行优化。 #include #include #include using namespace std; int p[10010]; int v[10010]; int find(int x){ if(p[x]==-1) return x; return find(p原创 2016-08-04 18:40:41 · 304 阅读 · 0 评论 -
折半查找
/** 折半查找:要求表顺序存储和元素关键字有序排列,适用于表不易变动且需频繁查找的情况。 查找过程可以用一棵二叉树表示 实质是根据现有条件,不同的思路来剪枝,最终的效果是访问的事物少了 */ #include using namespace std; //返回查找元素data的下标 int find(int *a,int len,int data) { int l=0; int原创 2017-10-01 16:04:02 · 307 阅读 · 0 评论 -
单链表
/** 头结点:如果没有头结点那么插入和删除就会多一种情况要处理。 //这里如果没有头结点,当root开始为空,导致新建第一个结点找不到。 */ #include using namespace std; struct node { int data; node *link; }; //声明单链表头结点 node *first; /** 单链表的查找:查找第k个结点(可包括头结点,原创 2017-09-30 20:56:34 · 194 阅读 · 0 评论 -
链队列
/** 头结点:如果没有头结点那么插入和删除就会多一种情况要处理。 //这里如果没有头结点,当root开始为空,导致新建第一个结点找不到。 */ #include using namespace std; struct node { int data; node *link; }; //声明单链表头结点 node *first; /** 单链表的查找:查找第k个结点(可包括头结点,原创 2017-10-01 00:23:31 · 233 阅读 · 0 评论 -
链栈
/** 头结点:如果没有头结点那么插入和删除就会多一种情况要处理。 //这里如果没有头结点,当root开始为空,导致新建第一个结点找不到。 */ #include using namespace std; struct node { int data; node *link; }; //声明单链表头结点 node *first; /** 单链表的查找:查找第k个结点(可包括头结点,原创 2017-09-30 23:28:45 · 206 阅读 · 0 评论 -
排序算法
#include using namespace std; void out(int *arr,int len) { for(int i=0; i<len; i++) { printf("%d ",arr[i]); } printf("\n"); } //简单排序:选择、冒泡、直接插入 /* 选择排序:从无序区选择一个最值放进有序区。 */ void choice(int *a原创 2017-10-07 15:56:55 · 203 阅读 · 0 评论 -
dijkstra算法
/* 非负权值的单源最短路径(有向) dijkstra算法为贪心算法,每个阶段总是选取当前状态下的最优解, 当得到当前状态下的最优点(最短距离)i时,该点即为终点i的最短距离,因为如果走其他点,必定大于当前距离。 */ #include #include using namespace std; const int INF=0XFFFF;//最大值,表示两点之间无穷远,没有路径可达 c原创 2017-02-18 17:58:45 · 298 阅读 · 0 评论 -
最小生成树的Prim算法笔记
#include using namespace std; const int max=7; const int mm=100; int matrix[max]; int edge[max][max]; int newedge[max][max]; bool visited[max]; void insert(int a,int b,int w){ edge[a][b]=edge[b][a]=原创 2016-08-20 22:58:09 · 340 阅读 · 0 评论 -
相同的雪花(哈希)
#include #include #include #include using namespace std; const int N=19373; const int M=100; int a[6]; int l[N]; int hash[N][M][6]; bool Judge(int *a, int *b) //判断雪花形状是否相同(即可以将对应的棱角重合) { int i原创 2016-08-06 22:31:56 · 736 阅读 · 0 评论 -
红黑树
寒江独钓的博客(红黑树详细讲解):http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html 个人尝试写的红黑树代码: //红黑树:1.一个节点有且仅有一条左子女边为红色。特点1:黑色平衡,从根节点到各个叶节点的路径上,黑色边的条数都相同 #include using namespace std; const bool原创 2016-08-05 19:16:04 · 345 阅读 · 1 评论 -
二叉排序树
/* 二叉排序树,这里例子的结点只给出关键字 key 插入过程相当于动态排序,可以有折半搜索和线性搜索的性质 最差情况是导致线性搜索,例如下面的例子都是右子树 改进可以用平衡二叉树或称AVL树或称红黑树,从而压缩树深度,越接近折半搜索 */ #include #include using namespace std; struct node { int key; node *lc原创 2017-10-02 01:50:24 · 198 阅读 · 0 评论