数据结构
文章平均质量分 78
AC_Gibson
这个作者很懒,什么都没留下…
展开
-
求二叉树中以x为值的根结点的子树的深度
#include #include using namespace std;typedef struct BTNode{ int data; BTNode *lchild, *rchild;}BTNode,*BTree;//返回根为T的树深度int get_Depth(BTree T){ int m,n; if(T)原创 2015-01-06 17:30:17 · 9421 阅读 · 2 评论 -
POJ3468 A Simple Problem with Integers 线段树成段更新(lazy)
题目连接:http://poj.org/problem?id=3468题目大意:给出一个100000的序列,进行100000次操作,操作"C l r v"表示将区间[l,r]内的所有元素的值加上v;操作"Q l r"表示查询区间[l,r]的元素的和。实现代码如下://线段树成段更新:每次更新一个区间[l,r]#include using namespace std;原创 2015-05-14 09:30:02 · 551 阅读 · 0 评论 -
HDU1166 敌兵布阵 线段树区间求和||树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166线段树实现代码如下://线段树区间求和#include #include #include #include #include using namespace std;#define maxn 50005int num[maxn];struct se原创 2015-05-13 14:07:16 · 524 阅读 · 0 评论 -
二叉树常用操作(创建、查找、求高度、遍历、打印)
/*Author:IbsenData:2015.12.15*///二叉树创建、查找、求高度、7种遍历、打印输出#include #include #include using namespace std;const int M=1000; //定义节点最大值//定义链式存储结构typedef struct node{ char data; //数据元素 struc原创 2015-12-15 12:35:38 · 1836 阅读 · 0 评论 -
二叉树的构造
我们假设二叉树中每个节点的值都不相同,那么二叉树具有唯一的先序序列、中序序列、后序序列(注意不同的二叉树可能有相同的先序、中序、后序序列)。引入如下两个定理(数学归纳法很容易可以证明,这里不给出证明):1.任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和先序序列唯一确定。1.任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和后序序列唯一确定。给出二叉树的两个序列,返回原创 2015-12-15 18:44:34 · 649 阅读 · 0 评论 -
二叉树中根结点到某节点的路径(求某结点的所有祖先)
假设二叉树用二叉链存储结构:1.对于“找出根结点到叶子节点之间的路径”提供两种不同的算法:用栈辅助的基于后序非递归遍历的算法,和用队列辅助的基于层次遍历的算法。2.对于某一给定的节点,求出它的所有祖先:递归求解。具体实现代码如下:#include using namespace std;const int M=1000;typedef struct node{ c原创 2015-12-15 15:07:44 · 6233 阅读 · 1 评论 -
二叉搜索树(BST)的常用操作:建树、插入、查询、删除、排序打印
/*Author:IbsenData:2015.12.21*///二叉搜索树:建树,插入,删除,排序输出.#include #include using namespace std;const int M=1000; //数据大小int A[M]={5,2,1,6,7,4,8,3,9},n=9;typedef struct node{ int key; //关键字原创 2015-12-21 11:02:52 · 1959 阅读 · 0 评论 -
哈希表的常用操作:创建、插入、查找、删除
/*Author:IbsenData:2015.12.21*///哈希表的创建、插入、查找、删除(保留余数法建表,线性探查法解决哈希冲突哈希冲突)#include using namespace std;const int M=1000; //定义哈希表最大长度const int P=13; //保留余数法的除数typedef struct node{ int key;原创 2015-12-21 13:09:38 · 13412 阅读 · 1 评论 -
归并排序
归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。其每趟归并产生的有序区间只是局部有序,也就是说,在最后一趟排序结束前,所有元素不一定归为。实现代码如下:/*Author:IbsenData:2015.12.22*///归并排序:时间O(n*logn),空间O(n),稳定#include #include using namespace std;int R[]={原创 2015-12-22 20:16:06 · 630 阅读 · 0 评论 -
基数排序
在基数排序之前,我们先来看一下计数排序:计数排序是一个非基于比较的排序。它的优势在于对一定范围内的整数排序时,它的时间复杂度为O(n+k)(其中k为整数的范围),快于任何比较排序算法。计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素的元素的个数,有了这一信息就可以把x归位了。例如,如果数组有6个元素比x小,那么x归为后几位数组中的第7个元素。实现代码如下:/*Au原创 2015-12-22 20:38:00 · 672 阅读 · 0 评论 -
BFPTR算法(中位数的中位数算法)求n个数中第k大的数
BFPTR算法求n个数中第k大(即第n-1-k小)的数,其思想是基于快速排序中对Partion的pivot值进行优化,快速排序中每一趟快排的pivot的选取一般是数组的首项或者尾项(数值比较随机),而BFPTR是每次选择5分中位数的中位数作为pivot进行下一趟快速排序的,这样做可以使算法的时间复杂度由最坏的O(n^2)变为O(n).实现代码如下:#include using names原创 2015-12-24 19:30:51 · 5051 阅读 · 2 评论 -
HDU5249 KPI 树状数组+二分(或set容器类)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5249分析:树状数组纪录元素排序后的下标,然后二分查找中位数。树状数组+二分实现代码如下:#include #include #include #include #include using namespace std;const int maxn=10005;原创 2015-06-02 12:55:05 · 617 阅读 · 0 评论 -
HDU1754 I Hate It 线段树区间最值
题目链接:点击打开链接//线段树区间最值#include #include #include #include #include using namespace std;#define maxn 200005int num[maxn]; //纪录每个学生的成绩struct segmentree{ int l; //左端点 int r; //右端点原创 2015-05-13 15:34:48 · 633 阅读 · 0 评论 -
C++STL中vector容器类的简单操作
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象;简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector容器类的基本操作有:(1)头文件:#include (2)创建对象int类型对象ans:vector ans;原创 2015-01-26 19:22:28 · 1322 阅读 · 0 评论 -
字符串排序(qsort函数用法小结)
首先说一下字符串的排序:代码(1):#include #include #include #include using namespace std;#define MAXN 1000#define N 100int cmp(const void *a,const void *b){ return strcmp((char*)a,(char*)b);原创 2015-01-27 14:16:57 · 3319 阅读 · 0 评论 -
栈的简单操作(栈的链式存储)
#include #include using namespace std;typedef struct node{ int data; struct node *next;}Listack;//初始化栈void Init(Listack * &s){ s=(Listack *)malloc(sizeof(Listack));原创 2014-12-28 13:36:22 · 578 阅读 · 0 评论 -
双向链表的有关操作(创建,遍历,插入,删除)
#include #include #include using namespace std;typedef struct node{ int ans; struct node *prior,*next;}Node,*DLinklist;//初始化头结点DLinklist init(DLinklist h){ h=(Node *)m原创 2014-11-04 19:34:07 · 2989 阅读 · 0 评论 -
栈的简单操作(顺序结构存储)
#include #include #define MAX 100using namespace std;//定义栈结构体typedef struct node{ int data[MAX]; int top;}Sqstack;//初始化栈void Init(Sqstack * &s){ s=(Sqstack *)malloc(原创 2014-12-28 12:47:28 · 521 阅读 · 0 评论 -
单向链表的相关操作(创建,遍历,插入,删除,逆置)
#include #include #include #include using namespace std;typedef struct node{ int ans; struct node *next;}Node,*Linklist;//初始化头结点Linklist init(Linklist h){ h=(Node *)原创 2014-10-31 17:11:08 · 1007 阅读 · 0 评论 -
c++STL中优先队列的使用
说到队列,我们首先想到就是先进先出,后进后出;那么何为优先队列呢,在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问。即优先队列具有最高级先出的行为特征。优先队列在头文件#include 中;其声明格式为:priority_queue ans;//声明一个名为ans的整形的优先队列基本操作有:empty( ) //判断一个队列是否为空pop( )原创 2015-03-11 16:15:42 · 25724 阅读 · 4 评论 -
HDU1251 统计难题 tire树
题目大意:给你一系列字符串作为母串,对于若干次询问,每次询问包含一个字符串,输出该以字符串为前缀的母串的数目。分析:典型的tire树,在每次插入数据的时候纪录前缀数。实现代码如下:#include #include #include #include using namespace std;#define son_num 30 //字符串中包含的字符个数#d原创 2015-04-29 14:39:47 · 520 阅读 · 0 评论 -
HDU1004 Let the Balloon Rise tire树
题目大意:找出若干字符串中出现频率最高的字符串并输出。分析:Tire树的应用,不过本题数据量比较小,纯暴力也能A。Tire树实现代码如下:#include #include #include using namespace std;#define son_num 30 //字符串中包含的字符个数#define maxn 15 //单词的最大长度struct tire原创 2014-08-07 10:14:27 · 509 阅读 · 0 评论 -
Tire树(字典树)的基本操作
Tire树的基本原理: Tire树是一种树形结构,因其是词典的一种存储方式,故又叫字典树。词典中的每一个单词在tire树中表现为一条从根结点出发的路径,路径边上的点连起来就是一颗tire树,如右图:其中含有ab,abc,bac,bbc,ca五个单词。 Tire树的基本性质可以归纳为:(1)根结点不包含字符,其他的每一个节点只包含一个字符;(2)从根结点到原创 2015-04-29 13:20:21 · 5515 阅读 · 2 评论 -
常用排序汇总
常用排序有:1.插入排序(直接插入排序,折半插入排序,希尔排序)2.交换排序(冒泡排序,快速排序)3.选择排序(直接选择排序,堆排序)4.归并排序5.基数排序/*Author:IbsenData:2015.12.21*///排序汇总(插入排序(3种),交换排序(2种),选择排序(2种))#include using namespace std;in原创 2015-12-21 14:22:25 · 1094 阅读 · 0 评论