摘要: 基本数据结构:栈(stack)作者:C小加更新时间:2012-8-1栈(stack)是限制插入和删除只能在一个位置上进行的线性表,该位置在表的末端,叫做栈顶。添加元素只能在尾节点后添加,删除元素只能删除尾节点,查看节点也只能查看尾节点。添加、删除、查看依次为入栈(push)、出栈(pop)、栈顶节点(top)。形象的说,栈是一个先进后出(LIFO)表,先进去的节点要等到后边进去的节点出来才能出来。如图1,是一个栈的形象图,top指针指向的是栈顶节点,所以我们可以通过top访问到2节点,但是0和1节点由于先于2进入这个表,所以是不可见的。如果把0节点当做头节点,2节点当做尾节点,那么栈限制了访问 阅读全文
posted @ 2012-08-13 15:46 andyidea 阅读(3300) 评论(2) 推荐(1) 编辑
摘要: 基本数据结构:链表(list)作者:C小加更新时间:2012-7-31 谈到链表之前,先说一下线性表。线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表有两种存储方式,一种是顺序存储结构,另一种是链式存储结构。 顺序存储结构就是两个相邻的元素在内存中也是相邻的。这种存储方式的优点是查询的时间复杂度为O(1),通过首地址和偏移量就可以直接访问到某元素,关于查找的适配算法很多,最快可以达到O(logn)。缺点是插入和删除的时间复杂度最坏能达到O(n),如果你在第一个位置插入一个元素,.. 阅读全文
posted @ 2012-08-10 16:05 andyidea 阅读(8362) 评论(2) 推荐(5) 编辑
摘要: 题意:A square problem Time Limit: 3 second Memory Limit: 1000KThere live square people in a square country. Everything in this country is square also. Thus, the Square Parliament has passed a law about a land. According to the law each citizen of the country has a right to buy land. A land is sold in 阅读全文
posted @ 2011-10-10 21:34 andyidea 阅读(528) 评论(0) 推荐(1) 编辑
摘要: 概述: 宏是C和C++语言的抽象设施中最生硬的工具,它是披着函数外衣的饥饿的狼,很难驯服,它会我行我素地游走于各处。要避免使用宏。讨论: 在C++中,几乎从不需要使用宏。 可以用const或者enum定义易于理解的常量,用inline避免函数调用的开销,用template指定函数系列和类型系列,用namespace避免名称冲突。 C++的宏的主要问题在于,它们表面上看起来很好,而实际上做的却是另一回事。宏会忽略作用域,忽略类型系统,忽略所有其他的语言特性和规则,而且会劫持它为文件其余部分所定义(#define)的符号。宏调用看上去很像符号或者函数调用,但实际上并非如此。宏... 阅读全文
posted @ 2011-09-20 17:20 andyidea 阅读(1246) 评论(4) 推荐(1) 编辑
摘要: 从《严书》上看到了KMP算法,看了一遍没懂,但觉得挺神奇的,就花费了几天时间深入的理解。算法的原理其实不难,难的就是那个巧妙的next数组,这个next数组很吸引我,我的大部分时间也都是花费在这个数组上面的。这个next数组是KMP里面一个很关键的地方,对于在数据结构书上看过一遍整个算法流程的人,能... 阅读全文
posted @ 2011-09-16 14:47 andyidea 阅读(5595) 评论(4) 推荐(4) 编辑
摘要: 实体:变量、类、函数、名称空间、模板和库。只给一个实体赋予一个定义良好的职责。随着实体变大,其职责范围自然也会扩大,但不应该发散。如果一个实体有几个不同的目的,则给使用带来的难度往往会激增,因为这种实体除了会增加理解难度、复杂性和各部分中的错误外,还会导致其他问题。这种实体不仅更大,而且更难以使用和维护。此外,这种实体经常会为自身的一些特定用途提供有问题的接口,因为各个功能领域之间的部分重叠,会影响干净利落地实现每个功能所需的洞察力。具有多个不同职责的实体通常都是难于设计和实现的。“多个职责”经常意味着“多重性格”----可能的行为和状态的各种组合方式。应该选择目的单一的函数,小而且目的单一的 阅读全文
posted @ 2011-07-09 17:38 andyidea 阅读(381) 评论(0) 推荐(2) 编辑
摘要: 虽然警告不会影响你代码的运行,但请不要忽略它。把编译器当做你的朋友,如果它对你发出警告,这经常是说明你的代码中存在潜在的问题。常遇到的一些警告:1、第三方头文件。2、未使用的函数参数。3、定义了从未使用过的变量。4、变量使用前可能未经过初始化。5、遗漏了return语句。6、有符号数/无符号数不匹配。例外情况:有时候,编译器可能发生烦人的甚至虚假的警告,但是又没有提供消除的办法,这时忙于修改代码解决这个警告可能是劳而无功或者事倍功半的。如果遇到了这种罕见的情形,作为团队的决定,应该避免对纯粹无益的警告再做无用功:单独禁用这个警告,但是要尽可能在局部禁用,并且编写一个清晰的注释,说明为什么必须禁 阅读全文
posted @ 2011-06-22 22:41 andyidea 阅读(550) 评论(1) 推荐(1) 编辑
摘要: 如果人们按照程序员编程的方式修建房屋,那么一只啄木鸟就能毁灭整个文明。 ---Gerald Weinberg《C++编程规范》这本书是对多年的C++经验的总结,是编写高质量C++代码的准则。这本书能给一些初学者带来质的变化,因为代码的规范也是衡量一个优秀程序员的标准。如果你看过这本书的话,就不要继续看下去浪费自己的时间了,我也只是个大学生,你可以想象得到能从我这里得到些什么了。如果你没看过这本书的话,希望你能看完这篇文章,可能马上你就会跑到书店,或者图书馆,或者当当。这本书是从第0条开始的,代码书写的首要指导原则,对编程规范而言最基本的建议。不要拘泥于小节。作者把这句话作为标题,意思是说你写的 阅读全文
posted @ 2011-06-21 22:16 andyidea 阅读(709) 评论(2) 推荐(1) 编辑
摘要: 题意:是找到一个最小的正整数Q,使Q的各位数的乘积等于N。思路:从9到2取余。代码: #include <iostream>#include <algorithm>usingnamespace std;bool fun(int x,int*ops,int&num){ if(x==1) return1; for(int i=9;i>=2;i--) { if(x%i==0) { ops[num]=i; num++; return fun(x/i,ops,num); }... 阅读全文
posted @ 2011-06-17 15:22 andyidea 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 题意:投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数的人投赞成票,那么这一组就投赞成票。思路:很水的题。。。代码:#include <iostream>#include <algorithm>usingnamespace std;int a[103];int main(){ int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); int m=(n+1)/2; int sum=0; ... 阅读全文
posted @ 2011-06-12 08:53 andyidea 阅读(566) 评论(0) 推荐(0) 编辑