数据结构
文章平均质量分 71
李祖林
这个作者很懒,什么都没留下…
展开
-
树状数组详解
转至:http://blog.csdn.net/int64ago/article/details/7429868谢谢大牛的博客!收藏了方便以后复习!!一、树状数组是干什么的? 平常我们会遇到一些对数组进行维护查询的操作,比较常见的如,修改某点的值、求某个区间的和,而这两种恰恰是树状数组的强项!当然,数据规模不大的时候,对于修改某点的值是非常容易的,复杂度是O(1),但是对于转载 2016-08-23 10:25:45 · 289 阅读 · 0 评论 -
nyoj 题目305 表达式求值
解法:栈! #includeusing namespace std;int main(){ int T; scanf("%d",&T); while(T--) { stackpq; char s[1005],str[1005]; string s1; scanf("%s",str);原创 2016-08-05 23:28:41 · 248 阅读 · 0 评论 -
struct和typedef struct
转至:http://www.cnblogs.com/qyaizs/articles/2039101.htmlstruct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;转载 2016-08-17 17:07:14 · 225 阅读 · 0 评论 -
hdu 3789 奥运排序问题
有两个坑:1.如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.没有第三名。2.要求排名的国家数M,是给选出来的国家进行排名。解法:结构体+sort#includeusing namespace std;struct PM{ double data; int num;//记录城市编号};bool cmp(PM a,PM原创 2016-08-16 21:46:49 · 1092 阅读 · 0 评论 -
排序链表去重
给定排好序的链表,删除重复元素,只保留重复元素第一次出现的节点。问题:给定:2 3 3 5 7 8 8 8 9 9 10返回:2 3 5 7 8 9 10解法:若p->next的值和p的值相等,则将p->next->next赋值给p,删除p->next;重复上述过程直至链表尾端。#includeusing namespace std;struct node{ in原创 2016-07-21 21:07:04 · 776 阅读 · 0 评论 -
链表的翻转
要求:给定一个链表,翻转该链表从fro到to的位置,要求直接翻转而非申请新空间。1.如给定1->2->3->4->5,fro=2,to=4,返回1->4->3->2->5解法:空转fro-1次,找到第fro-1个节点,即开始翻转的第一个节点的前驱,记作tail;以tail为起始节点遍历to-fro次,到第i次时,将找到的节点插入到tail的next中即可。即头插法!#include原创 2016-07-21 10:16:22 · 239 阅读 · 0 评论 -
链表相加
给定两个链表,分别表示两个非负整数。他们的数字逆序存储在链表中,且每个节点只存储一个数字,计算两个数的和,并且返回和的链表头指正。如:输入1->2>3 8->7->7 输出:0->0->0->1 解法:因为两个数都是逆序存储,正好可以从头向后依次想加,完成加法运算。注意考虑尾数不同的情况#include#include#include#includeusing namesp原创 2016-07-20 20:36:01 · 2777 阅读 · 0 评论 -
c++运算符重载
以下示例中定义了一个class test, 重载了>等符号:#include#includeusing namespace std;class test{public: int v; test():v(0){} test(const int &a):v(a){} test(const test &t1):v(t1.原创 2016-07-30 09:14:34 · 198 阅读 · 0 评论 -
练习场 题目714 Card Trick
题意:给你n张牌,分别是1-n 第一次把最上面1张放到最下面,亮出当前最上面的牌 使其为1 第二次把最上面2张放到最下面,亮出当前最上面的牌 使其为2 第三次把最上面3张放到最下面,亮出当前最上面的牌 使其为3 第四次............. 解法:队列模拟整个操作! #includeusing namespace std;int main(){ int原创 2016-07-29 20:37:08 · 248 阅读 · 0 评论 -
最长括号匹配(栈)
问题:给定一个只含左括号和右括号的字符串,找最长匹配的括号子串的长度;如:():2,((():2,(()):4,()():4解法:记开始匹配位置star=-1,最长匹配长度maxn=0,考察第i位字符c;如果c为左括号,压栈;如果c为右括号,他一定与栈顶左括号匹配;a.如果栈为空,表示没有匹配的左括号,star=i,为下一次可能的匹配做准备。b.如果栈不为空,出栈1.如果栈原创 2016-07-29 10:33:05 · 452 阅读 · 0 评论 -
zoj Lunch Time 3875
简单题,之前写的时候,写的是一个结构体,提交没有通过,后面分开就过了!!原创 2016-06-08 16:11:34 · 265 阅读 · 0 评论 -
hdu 1274 展开字符串(栈)
第一次写的时候,思路有点乱,代码写的乱七八糟,后面看了大牛的题解,才恍然大悟!!#includeusing namespace std;int main(){ int T; cin>>T; while(T--) { string str,str2; stackpq; cin>>str;原创 2016-06-09 16:51:25 · 286 阅读 · 0 评论 -
bnuoj 51121 Simple Polynomial Problem(栈+运算符重载+多项式运算)
第一次接触多项式运算,自己写有点困难,看懂了大牛代码,然后自己写了一份;#include #include #include #include #include #include #define Mod 1000000007using namespace std;struct point{ long long a[1050]; point原创 2016-06-10 22:44:29 · 425 阅读 · 0 评论 -
hdu 1880 魔咒词典
用map做超内存,然后老老实实的用普通方法去做秒了!map方法(Memory Limit Exceeded):#includeusing namespace std;int main(){ string str; mappq; while(getline(cin,str),str!="@END@") { string s原创 2016-06-12 09:25:37 · 222 阅读 · 0 评论 -
hdu 2100 lovekey
题意:开始被题目迷惑了,其实很简单就是给你两个26进制的数,求他们的和;解法:大数加法!!最近在学链表,所以用链表写的。#includeusing namespace std;int n,m;struct node{ char val; node *next; node(char c):val(c),next(NULL){}}*root;void pri原创 2016-07-25 16:26:51 · 332 阅读 · 0 评论 -
链表的划分
问题:给定一个链表和一个值X,将链表划分成两部分,使得划分后小雨X的节点在前面,大于X的节点在后。保持原顺序不变。如:给定链表:1 7 8 2 4 3 2 5 2 0和X=3,返回:1 2 2 2 0 7 8 4 3 5解法:分别申请两个指针p和q,小于X的添加到p中,大于等于的添加到q中,最后将q连接到p的末端即可。扩展:可以适用于快速排序。#includeusing name原创 2016-07-22 16:01:37 · 650 阅读 · 0 评论 -
链表去重2
问题:发现重复元素,则删除全部重复元素,如:给定:2 3 3 3 5 7 8 8 8 8 9 9 10 输出:2 5 7 10解法:若q->next的值和q的值相等,则将q->next->next赋值给p,删除q;重复上述过程直至链表尾端。#includeusing namespace std;struct node{ int val; node *next;原创 2016-07-22 15:00:41 · 354 阅读 · 0 评论 -
nyoj 题目409 郁闷的C小加(三)
郁闷的C小加(三)时间限制:1000 ms | 内存限制:65535 KB难度:4描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为前缀和后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。输入第一行原创 2016-08-21 17:25:50 · 442 阅读 · 0 评论