数据结构
再远不过PC
这个作者很懒,什么都没留下…
展开
-
数据结构--树--线索二叉树(中序,前序,后序)
线索二叉树在遍历二叉树的时候,会有许多空指针域,这些空间不存储任何事物,白白浪费了内存的资源。那么在做遍历的时候,提前记录下每个结点的前驱和后继,这样就更加节约了时间。 [ lchild ] [ LTag ] [ data ] [ RTag ] [ rchild ] LTag = { 0 : lchild 域指示结点的左孩子 1 : lchild原创 2017-05-11 00:18:45 · 16809 阅读 · 5 评论 -
栈操作
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存取自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常习惯将top=0表示空栈。栈结构体typedef int ElemType; typedef struct SeqStack{ ElemType data[MAXSIZE]; int top;} SeqStack;①初原创 2017-05-01 00:29:40 · 390 阅读 · 0 评论 -
数据结构-归并排序-自顶向下
BottomUpSort归并排序,是自底向上的排序下面介绍一个自顶向上的排序MergeSort排序,也是一个分治的典例 9 4 5 2 1 7 4 6 1 2 4 4 5 6 7 9 1/ 14原创 2017-04-13 19:31:53 · 680 阅读 · 0 评论 -
数据结构-选择排序-简单选择排序
选择排序①简单选择排序②树形选择排序③堆排序-------------------------------------------------分隔线-------------------------------------------------SELECTIONSORTREC简单选择排序令A[1...n]为一个有n个元素的数组,一种将A中元素进行排序的简单直接算法原创 2017-04-11 00:34:05 · 556 阅读 · 0 评论 -
数据结构-选择排序-堆排序
堆排序(Heap Sort)只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。堆定义:满足ki堆排序方法对记录较少的文件不值得提倡,对n较大的文件还是很有效的。因为其运行时间主要耗费在建初始堆,和调整新堆最大优点是,堆排序的最坏情况下,时间复杂度也是O(nlogn)。原创 2017-04-11 16:41:25 · 349 阅读 · 0 评论 -
数据结构-选择排序-树形选择排序
选择排序①简单选择排序。②树形选择排序。←this③堆排序。树形选择排序(Tree Selection Sort),又称锦标赛排序(Tournament Sort)是一种按照锦标赛的思想进行选择排序的方法。描述过程:首先对n个记录的关键字进行两两比较,然后在其中[n/2](取上界)个较大(小)者之间再进行两两比较,选出最大(小)关键字的记录为止。取出最大(小)关键字原创 2017-04-13 17:22:39 · 2762 阅读 · 0 评论 -
数据结构-插入排序-希尔排序
插入排序:①直接插入排序。②折半插入排序。③2-路插入排序。④表插入排序。⑤希尔排序。←this希尔排序,又称“缩小增量排序”(Diminishing Increment Sort),它也是一种属插入排序类的方法,但在时间效率上较前述几种排序方法有较大的改进。描述过程:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序原创 2017-04-13 17:18:35 · 616 阅读 · 0 评论 -
数据结构-插入排序-直接插入排序
插入排序:①直接插入排序。②折半插入排序③2-路插入排序。④表插入排序。-------------------------------------------------分隔线-------------------------------------------------INSERTIONSORT,直接插入排序是一种最简单的排序方法,基本操作是将一个记录插入到已排好序的有原创 2017-04-10 16:45:08 · 520 阅读 · 0 评论 -
数据结构-插入排序-表插入排序
插入排序:①直接插入排序。②折半插入排序。③2-路插入排序。④表插入排序。←this⑤希尔排序。表插入排序,用表的方式进行插入排序操作描述过程:将一个记录插入到已排好序的有序表中,优点:避免了移动时间复杂度:O(n2)const int SIZE=10;typedef struct{ int rc;//记录项 int next;/原创 2017-04-13 17:17:06 · 2366 阅读 · 0 评论 -
栈结构
栈有两种存储表示方式顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素的顺序栈中的位置。①设计栈结构体typedef int ElemType; typedef struct SeqStack{ ElemType data[MAXSIZE]; int top;} SeqStack;②初始化栈原创 2017-04-30 17:14:11 · 413 阅读 · 0 评论 -
二叉树系列(建树,前序,中序,后序,中序非递归,深度,叶子数,节点数)
二叉树 a / \ b $ / \原创 2017-05-01 17:37:44 · 1236 阅读 · 0 评论 -
数据结构 (线段树入门详细介绍)(单点更新)(结构体)
(线段树入门)HDU 1166 敌兵布阵(单点更新)(结构体形式)题目意思:输入T,T个测试样例每一次输入一个n,说明有n个数据。再输入n个数据。输入Query a b :查询a b 之间的和输入Add i x:在 i 处增加 x个数输入Sub i x:在 i 处删除 x个数输入End 结束举例:1101 2 3 4 5 6 7 8 9 10原创 2017-05-02 00:51:50 · 518 阅读 · 0 评论 -
数据结构- 快速排序
快速排序这是一个非常流行并且高校的排序算法:QUICKSORT。首先要先介绍一下划分算法:设A[ low...high ]是一个包含n个数的数组,并且x=A[low]。重排数组A,使得小于等于x的元素排在x前面,大于x的元素排在x后面。得到新数组:对于w ,low ≤ w ≤ high,x在A[w]中。如:数组A=5 3 9 2 7 1 8 ,low=1(最低),high=原创 2017-04-10 20:13:07 · 446 阅读 · 0 评论 -
线性表的链式表示和实现
利用线性表的基本操作,实现学生成绩的插入、保存、删除、查找等操作的程序★结点类型和指针类型typedef struct Student{ charsno[20]; int G; }Student; typedef struct LinkNode{ DataTypedata; structLi原创 2017-04-27 15:11:00 · 395 阅读 · 0 评论 -
线性表的顺序表示和实现
用结构体实现线性表的顺序表示和实现。功能有创建,插入,删除,查找#include #include #include #include #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量#define ElemType int type原创 2017-04-27 14:59:02 · 382 阅读 · 0 评论 -
数据结构---树的应用----二叉排序树(查找)
二叉排序树(Binary Sort Tree) ,又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。1、若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2、若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3、它的左、右子树也分别为二叉排序树。总之每一个结点都满足下面条件: 左值 目的不是为了排序,而是为了提高查找和插原创 2017-05-11 23:44:52 · 1178 阅读 · 0 评论 -
数据结构-内部排序的比较《集合》
内部排序方法:①插入排序:(1)直接插入排序 (2)折半插入排序 (3)2-路插入排序(4)表插入排序(5)希尔排序②快速排序(1)划分算法+快速排序③选择排序(1)简单选择排序(2)树形选择排序(3)堆排序④归并排序(1)合并两个已排序表+自底向上归并排序(2)自顶向上合并排序⑤基数排序(1)多关键字排序(2)链式基数排序原创 2017-04-13 17:41:24 · 611 阅读 · 0 评论 -
树、森林与二叉树的转换
一、树转换为二叉树【1】每个双亲对他的第一个孩子结点不变,其他孩子断开联系【2】同辈的由长子带领,长子依次联系其他兄弟【3】调整位置,双亲与孩子的联系放左边,兄弟之间的联系放右边 A原创 2017-05-11 16:36:16 · 549 阅读 · 0 评论 -
数据结构-树(基本概念整合)
树形结构是一张非常重要的非线性数据结构。其中原创 2017-05-01 00:16:59 · 14861 阅读 · 0 评论 -
数据结构-类似并查集建
这种建树方法,在学完并查集之后,突然想到的。利用数组本身一对多的关系,就能完成建树。先初始化数组,将数组下标值和本身的值相等:即:father [ 0 ] =0, father [ 1 ] =1,father[ 2 ] =2,father [ 3 ] =3。。。。。father[ N ] =N;★解释一下为什么说数组本身具有一对多的关系?比如 father [ 2 ]原创 2017-05-02 14:43:02 · 402 阅读 · 0 评论 -
数据结构-插入排序-折半插入排序
插入排序:①直接插入排序。②折半插入排序。←this③2-路插入排序。←this④表插入排序。⑤希尔排序。折半插入排序描述过程:查找的操作可以利用“折半查找”(二分)来实现,在进行插入排序。伪代码:输入:n个元素的数组A[1~n] 。输出:按非降序排列的数组A[1~n]for i ←2 to nx ←A[i]low ←0,high ←原创 2017-04-13 17:15:25 · 673 阅读 · 0 评论 -
数据结构-基数排序
基数排序(Radix Sorting)之前的排序都是关键字相互比较和移动完成。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。分为:①多关键字排序,②链式基数排序两种①多关键字排序,还分为两种方法:一,最高位优先,二,最低位优先下面是最低位优先的方法,个十百千,的顺序 初始 个位 -> 十位 -> 百位 ->千位 7467 6792原创 2017-04-13 17:03:48 · 551 阅读 · 0 评论 -
数据结构 并查集 POJ 2236
#include #include #include using namespace std;#define N 1010int d;int use[N];struct node{ int pre; int x,y;}p[N]; int find(int x){ if(x == p[x].pre) return x; else return fi原创 2016-08-10 15:48:43 · 303 阅读 · 0 评论 -
数据结构 并查集 HDU 1213
#include #include using namespace std;int sum, n, m;int bin[1000];int findx(int x){ if(x!=bin[x]) bin[x]=findx(bin[x]); return bin[x];}void Union(int a, int b){ int x,y; x=findx(a); y原创 2016-08-10 15:48:06 · 265 阅读 · 0 评论 -
数据结构 并查集 HDU 1272
#include #include #include using namespace std;int bin[100010];int vis[100010];int findx(int x){ int r=x; while(bin[r] != r) r=bin[r]; return r;}int in(int x,int y){ int fx,fy; fx=fi原创 2016-08-10 15:46:49 · 227 阅读 · 0 评论 -
数据结构 并查集 HDU 1321
#include #include #include using namespace std;#define N 1010int bin[N];int n,m;int findx(int x){ int r=x; while(bin[r] != r) r=bin[r]; return r;}void join(int x,int y){ int fx,fy;原创 2016-08-10 15:45:12 · 316 阅读 · 0 评论 -
HDU 5804
#include #include #include /*坑点:所有的数都要 long long */long long a[100005];int main(){ int T,n,m; scanf("%d",&T); while(T--) { long long sum=0,tmp; scanf("%d%d",&n,&m); for(int i=0;i<n;i++原创 2016-08-08 09:36:45 · 328 阅读 · 0 评论 -
数据结构 并查集 UVA 1160
/* 并查集水题难点: 输入形式 */#include #include #include const int N=100005;int parent[N];//并查集int n,m;int ans=0;int find(int x){ if(x!=parent[x]) { return parent[x]=find(parent[x]); } else r原创 2016-08-07 22:49:31 · 328 阅读 · 0 评论 -
数据结构 并查集 Poj 1308
#include #include #include int parent[100005]; int vis[100005];int n,m;//用来记录 点的个数 为了判断是否有环 n为点 m为边 int flag;//是否输入的两个数字已经是 树上的点 int find(int x){ if(x!=parent[x]) { return parent[x]=find转载 2016-08-07 17:01:16 · 376 阅读 · 0 评论 -
数据结构 并查集 POJ 1611
#include #include #include const int N=30005;int parent[N];//并查集 int son[N];//用来累加 个数 int n,m; int find(int x){ if(x!=parent[x]) { return parent[x]=find(parent[x]); } else return x;}v原创 2016-08-07 20:03:29 · 301 阅读 · 5 评论 -
数据结构 种类并查集 HDU 1829
#include using namespace std;#define MAX 2000int pre[2*MAX+5];int n,m,flag;int find(int x){ if(x!=pre[x]) pre[x] = find(pre[x]); return pre[x];}void merge(int x,int y){ int fx,fy; fx=转载 2016-08-10 15:51:44 · 306 阅读 · 0 评论 -
图论 生成树 POJ 1251 Jungle Roads (prim)(Kruskal)
#include #include #include #include using namespace std;#define N 30#define INF 99999999int mp[N][N],vis[N],dis[N];int n;int prim(){ int i, j, p; int min, res = 0; memset(vis, 0, s原创 2016-08-11 10:52:07 · 297 阅读 · 0 评论 -
图论 生成树 POJ 1287 Networking(prim)( Kruskal)
#include #include #include #include using namespace std;#define N 55#define INF 99999999int n, m;int vis[N];int dis[N];int mp[N][N];int prim(){ int i, j, p; int min, res = 0;原创 2016-08-11 10:53:11 · 343 阅读 · 0 评论 -
数据结构-归并排序
归并排序(Merging Sort)自底向上合并排序(Bottom Up Sort)归并的含义是将两个或两个以上的有序表组合成一个新的有序表。看着好像很麻烦,每次好不容易排好序了,又要合并起来重新排序,那么为什么比较次数会降低呢?移动方面:大的数自然往后移动,小的数自然的就往前移动,不会做过多的废物移动而浪费时间,从而每一步都是必要的移动。比较方面:因为每一次移动都是必要的,减少了原创 2017-04-13 15:02:27 · 400 阅读 · 0 评论 -
数据结构 RMQ
学习一下 RMQ,好吧,算是dp学习链接→ 戳这里和戳这里poj 3264 算是模板题RMQ,求给定区间的最值问题的,非线段树方法,DP#include #include #include #include #include using namespace std;const int maxn=50010;int a[maxn];int ma[maxn][20]原创 2016-09-28 15:03:28 · 308 阅读 · 0 评论 -
数据结构 线段树 hdu 5-8-7-7 Weak Pair 线段树+离散化
题意:T个测试样例,有n个节点,和一个数字K,输入n个数 a1,a2.........an,输入n-1个 u和v ,u是v的祖先,求满足a[ u ] * a[ v ]思路:首先看到u,v 肯定是要建树的,而且v要与v的所有祖先进行比较,比较的时候,a[ u ]然后建树,先序遍历树,然后用线段树去统计符合的个数,dfs 出来后 要把前面数过之后把分支清掉,重新数#include原创 2016-09-11 19:36:57 · 275 阅读 · 0 评论 -
数据结构 线段树 HDU 2795Billboard(单点更新)
题意:有h*w的 广告板子,现在要添加n次,的广告,每个广告宽度都为1,而且都只能横着放,依次输入每个广告的长度 x,问广告插入在哪一行,插不了输出-1解法:线段树 ,单点更新,找还剩下的地方的最大值,update就直接在 query里进行了#include #include #include #include #include using namespace s原创 2016-08-17 15:32:13 · 279 阅读 · 0 评论 -
数据结构 线段树 hdu1394 Minimum Inversion Number(单点更新)
题意:给一串数,当依次将第一个数变成最后一个数的过程中,求出最小的 逆序数。解法:先建树,全部初始化为0,依次从那串数中取数,添加到树中,用树来快速找出,在树中比这个数大的数的个数,累加起来。1.每当第一个数放到最后的时候,逆序数因为后移而减少a[i],放到最后增加n-1-a[i]。2.当然也可以每移动一次去求,在树中比这个数大的个数 去累计。#include #includ原创 2016-08-17 13:03:27 · 309 阅读 · 0 评论 -
数据结构 线段树 HDU 1754I Hate It(单点更新)
题意:给n门课,m次询问。Q,a,b为询问,[a,b] ;’U,a,b为更新第a个点,更新为b题解:单点更新,线段树#include #include #include #include #include using namespace std;const int N=200005;int Max[N<<2];void PushUP(int rt){ //比较出原创 2016-08-16 23:59:54 · 279 阅读 · 0 评论 -
数据结构 (线段树入门) HDU 1166 敌兵布阵(单点更新)
写的第一个线段树题。题意:对一个数列a1,a2……an,进行3种操作1.在数列中 i 处加 j 2.在数列中 i 处减 j3.询问求数列 i-j 处的和解法:线段树(第一次做,看程序再加上 查看建树,就很容易明白线段树是什么东西了)#include #include #include #include #include using namespace std原创 2016-08-16 16:16:57 · 517 阅读 · 1 评论