
数据结构
l04205613
闲人一个
展开
-
POJ2299 Ultra-QuickSort(归并排序)
手好生啊,归并排序,敲了这么久……题目意思是用冒泡排序的交换方式(只能交换相邻的俩个元素)最少几次可以把给出的序列做成升序,N有50W归并同时,统计需要往后移动的元素移动的距离之和,即为答案Code:#include#includeconst int N = 500001;int a[N],tt[N];__int64 count;vo原创 2012-05-05 21:22:42 · 805 阅读 · 0 评论 -
中缀表达式转后缀表达式求值(栈的应用)
咱们熟悉的四则运算表达式,中缀表达式,例如 (12+3)*2-6/2利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到表达式的值 挺简单的不假,也好理解,但就是一直无缘无故的卡着,卡的蛋疼……也不能说完全的无缘无故,其实是手生了吧,太生了……#include#include#include#include原创 2012-07-28 20:47:14 · 7391 阅读 · 0 评论 -
二叉树的几种操作
二叉树,经典数据结构,应用广泛一般来讲二叉树的重点在于遍历,因为几乎所有关于二叉树的操作都可以通过遍历解决,同时二叉树的遍历(先根,中根,后根)也有比较强的应用性(比如数学表达式求值)下面给出常规的递归做法,递归好处很明显,代码简单易懂,代码里面的求树的深度,节点数,叶子节点数,也都用的是递归的方法/*********************************原创 2012-08-01 14:05:39 · 1036 阅读 · 0 评论 -
单调队列
单调队列的特点,一个是严格单调性(不是非递增或者非递减),这样方便求区间最值;另外一个就是队头队尾都可以出队,但是只有队尾能入队,这个特点是为了保证队列内没有区间外的元素。常见应用,区间求最值,还有动态规划的优化处理。POJ2823 Sliding Windo,就是典型的求区间最值问题,单调队列可解CODE:#include//const int N = 1000001;#defi原创 2012-08-15 11:15:15 · 823 阅读 · 0 评论 -
字典树(TrieTree)
字典树(TrieTree),常见应用于大量字符串的保存,统计,查找等操作,由于字符串的公共前缀没有重复保存,所以操作起来比较方便,效率很高,搜索引擎的文本词频统计就是它的经典应用之一。HDU1251 统计难题题目要求计算一个给定字符串在特定字符集中以某个单词的前缀身份出现的次数,裸字典树……CODE:#includeconst int MAX = 26;typ原创 2012-08-14 13:53:00 · 1394 阅读 · 0 评论 -
线索二叉树
线索二叉树的定义:(摘自数据结构自考网http://student.zjzk.cn/course_ware/data_structure/web/shu/shu6.4.1.htm)n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。为了区分这个指针是指向前驱(或后继)还是指向孩子节点的,我们需原创 2012-08-03 11:15:23 · 1090 阅读 · 1 评论 -
单链表反转
单链表反转,可以用循环做,当然也可以递归详见代码:#include#includestruct Node{ int data; Node * next;};/*3 -> 1 -> 4 -> 6 -> 2 (1)1 -> 3 -> 4 -> 6 -> 2 (2)4 -> 1 -> 3 -> 6 -> 2 (3)6 -> 4 -> 1 -> 3 -> 2原创 2012-06-18 03:52:20 · 1426 阅读 · 0 评论 -
循环队列
复习吧算是……参考:《大话数据结构》程杰#include#define N 30struct Queue{ int front,rear; int QueueSize; int data[N]; void InitQueue(){ front = rear = 0; QueueSize = N; for(int i=0;i<QueueSize;d原创 2012-06-04 10:46:30 · 766 阅读 · 0 评论 -
POJ2503 Babelfish(hash)
10W 的字符串查询,据说 二分,map,sort 各种过,没有尝试,写的hash,自己的hash函数 TLE 了,搜了个 UNIX 用的处理字符函数……真心弱爆了,一直以来,指针都没有理解透彻,真心渣渣……Code:#include#include#include#define Mod 39917#define N 12#define M 100001st原创 2012-05-31 15:36:07 · 881 阅读 · 2 评论 -
POJ1840 Eqs(hash)
给出 a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 中的系数,还有x1,x2,x3,x4,x5范围[-50,50],求有几组 xi 的值满足等式 第一次碰 hash ,弱爆了的说,学着人家写的,用取余数建表,开始的时候,前三项建表,一直TLE……后来改成前两项建表,后三项查找,过去了。想想也是,建表时需要考虑去重问题,遍历链表会比较浪费时间,所以建表时应该尽量原创 2012-05-09 20:17:16 · 645 阅读 · 0 评论 -
POJ2002 Squares(hash)
给出N个点,问这些点能组成多少个正方形,N小于1000,显然的,思路是,先确定正方形的两个顶点,然后在点集中查找另外两个顶点至于查找,有两种做法,一个是二分,一个是hash,很明显,hash要快一些Node 1:二分 1157ms,具体见代码#include #include #include using namespace std;struct node{原创 2012-05-28 11:10:15 · 1040 阅读 · 0 评论 -
HDU4027 Can you answer these queries?(Segment Tree)
“线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。”“线段树并不适合所有区间查询情况,它的使用条件是“相邻的区间的信息可以被合并成两个区间的并区间的信息”。即问题是可以被分解解决的。”摘自董的博客,讲的很好HDU4027有一点不同的是,他的 区间更新操作 要做的是把每个数开平方根向下原创 2012-09-15 19:20:05 · 837 阅读 · 0 评论