05 2013 档案
摘要:排序,重要性不言而喻。 今天练手了快排,堆排序,和插入排序, 二分查找。 快排参考了 http://blogread.cn/it/article/612?f=sr ,写的不错! 可以看看。先总结下: 边界值很重要,一定要考虑到。说下快排,这个排序自诞生起,就引起了轰动,也名列十大经典算法之一。它主要分为两个步骤,划分和递归, 其中划分是算法的核心,递归是重要的思想。递归部分伪代码如下:1 quicksort(A[], p, r)2 if p < r3 q = partition(a, p, r)4 quicksort(a, p, q-1)5 qu...
阅读全文
摘要:顺序点初解为什么要谈到顺序点呢?源于前两天进行一问一答网的c++测试时,出现了一题:#include <iostream>using namespace std;int main(){ int a, b; a = 5; a = a + (a++); cout << a << endl; a = 5; b = a + (a++); cout<<b<<endl; return 0;}将输出什么结果?说真的,我一点头绪都没,难道不都是11吗? 而且,这种问题似乎在笔试的时候经常会考到! 很有必要解决掉。 今天逛CSDN论坛时,发现置顶的一篇
阅读全文
摘要:c++ virtual初步解析总结: virtual主要用于实现多态,使用场合是: 通过基类指针操作子类,在运行期动态选择子类方法而实现了多态。虚函数和纯虚函数虚函数可以被子类重写, 纯虚函数必须被子类重写。 虚函数是实现多态所必需的。发生继承操作时,同时继承基类所有的可继承项(public or proteced修饰)。倘若基类方法未用virtual修饰,使用基类指针调用子类方法时,输出的将是基类的方法!因为在编译期时把基类指针指向子类,运行期仍是执行基类,所以调用的是基类方法;若采用virtual修饰,则是在运行期时动态选择子类方法,从而实现了多态。见 stackoverflow : ht
阅读全文
摘要:堆,是一个相当重要的数据结构,它是优先队列,堆排序,Dijkstra等算法的实现保证!堆的主要特性是:1、根结点是最大/最小的,而这个主要的区别,就是实现比较操作时是less or greater, 因此可以使用纯虚化 比较接口,把实现放到子类。 附: STL中采用的是模板默认参数的方法实现。2、需要两个表示大小的变量来标定堆or数组的大小。因为pop操作因让堆的有效长度变小,而数组的长度不变。3、堆的插入操作一般是插入到数组的末尾,这里最好用vector, 因为它可以在常数时间内尾插入数据且能够动态生长。 1 #include <vector> 2 #include <os
阅读全文
摘要:晚上和朋友出去小饮了几杯,调侃了下blablabla。。。现在有点晕乎乎的,文章可能很凌乱,算是很抱歉。下午实现了下链表形式的二叉树,顿时感觉数据结构的实现,理论和实际的差距还是很大的。要走的路还是很长远的。总结下,就是递归很重要,这个是解决树问题的核心钥匙!对于二叉树,很多实现是基于排序二叉树的线性表示,即可以根据父节点的索引直接定位到子节点的位置,即 parent*2 = leftChild, parent*2+1=rightChild等等,一切可以用公式表示。本文,我们采用指针形式来实现。每个数据结构的实现,首要是实现结点类的设计。根据需求,我们知道它有三个指针域,分别指向父节点,左结点
阅读全文
摘要:STL中的栈和队列是基于deque实现的,本质是在stack/queue类内存在一个deque对象,让后stack/queue的成员方法调用下deque的个别接口,就自定义出来了栈和队列。因此这个实现我算在前一章的chain中就做了,本文就基于数组来实现下栈和队列。对于stack,只能对栈顶进行push和pop操作,算是最简单的。因此,我们可以把栈类的定义如下: 1 template<class T> 2 class MyStacked{ 3 protected: 4 T* elements; 5 int size; 6 int capa...
阅读全文
摘要:前两天忙着改Paper的参考文献,今天终于搞定了,稍微舒了一口气,预祝我的Paper能够顺利发出。今天早上要给大一的学弟讲C课程设计---航班订票系统。无奈时间不够,昨晚八九点才空下来有时间写代码,匆忙花点时间写好了,早上调试下Bug,就给学弟们讲去了。航班订票系统的要求:1)飞机信息及本飞机机票销售情况的存储结构。飞机信息:飞机ID,航空公司,出发地、目的地、机票销售情况。2)所有机票销售信息:飞机ID,机票号、购买者姓名、购买者身份证。3)飞机管理(新增航班、停开航班)4)飞机票查询(按目的地、按时间、按要求:靠窗、靠过道、n人连坐等)。5)已售票信息查询6)销售飞机票及办理退票7)信息的
阅读全文
摘要:双向链表实现今天晚上用模板方法把双向链表实现了下,由于有点小粗心,在 insert中手抖了下,把tail->prev 打成了 tail->next,由于错误是发生在drop函数执行时,让我一直去调drop函数,调了半天还是一样错误,最后我系统在vs中监视了下值的变化,终于看到是insert出错了。 看来程序员离不开调试呀。另外,昨天说的模板输出重载,我说要在友元的实现时加上 <>, 但是今天我在gcc中测试了下,居然说找不到匹配的函数,导致编译不通过,真心蛋疼,vs和g++的区别还真心大,看来改天要好好专研下模板输出重载,知道的朋友希望能够告知下。对数据结构的实现,其实
阅读全文
摘要:C++的知识点很零碎繁琐,只是总结没啥作用,更多的应该是在实践中找问题。今天我去编写《数据结构,算法与应用 C++语言描述》中线性表的实现代码,感觉写代码能力生疏了好多。编写过程中,我发现了几个问题,很值得关注:1、我的代码是通过类模板编写的。很多人写代码的时候,都把声明和实现放在一个头文件里,primer中说要借用export才能实现分离编译,对于这点,我也不是很了解,但是我取巧了下,通过两个 #ifndef....#endif 达到了声明放在.h, 实现放在了.cpp中。2、模板类中关于<<的重载,需要在声明中加入 <> ,要不然编译不通过。3、cout 的刷新问题
阅读全文
摘要:More extensions to C , Some features of C++11对于稍微有些C++的同学,大概都知道C++和C的一些主要区别,大的区别就是一个是面向对象,一个是面向过程,这就涉及到对象; 同时,还有命名空间的引入,防止变量名冲突; 还有struct支持成员函数等。 我就继续注释一些更需要注意的一些不同,一些是C++11中的东西。引用可以通过引用修改它引的对象,但是不能改变它本身。这么听来,就像是常量指针, 另外,引用也让代码更加自然,不像c里边会出现一堆的&来表示传址调用。int a=1;int &r=a;int* const rr = a; // i
阅读全文
摘要:C语言博大精深。把 K&R 经典的TCPL看了好几遍,每次看都有新的收获。 手册就短短百来页,就把C的精髓都阐述的通透。但是,C语言是一门怎么学都学不够的语言,看了其他一些关于C的大牛书,感觉《C专家编程》非常好,我很喜欢,感觉正好是对我知识点的一个补充。因此,查缺补漏,我把《C专家编程》作为C方面的温故书籍。 当然,现在我的C水平有限,博客某些内容回到以后对这块有更好的认识了,再更新。 博客计划如下:一些零碎的易混淆知识 (持续更新)符号重载、优先级、结合性分析深入剖析声明一维数组和指针的辨析多维数组和指针链接的思考运行时数据结构对内存的思考
阅读全文
摘要:C++发展态势良好,已经出了C++11标准了。《C++ Annotations Version 9.6.0》也已经出了,补充了很多C++11的新东西, 下载点这里 。 个人感觉Annotation写的不错!感谢Frank B. Brokken! 查看了下Annotation的目录,吓坏掉,实在太多章了。当然,老外的书,都写的非常详细,写得很用心。既然作者敢写,那我就自然敢看。当然不可能巨细无遗的完整阐释书中完整的精髓,我的能力也有限。接触C++的时间不多,primer就看了一两遍,还有其他一些C++的相关书籍资料,个人认为算是小入门了吧。因此,也是按照我自己现有的水准,写些关于C++的基础提.
阅读全文
摘要:c和c++的某些小区别C++类型检查更加严格 c语言中,当字符当做函数参数传入是,都把字符当整型int使用,sizeof('c') = sizeof(int); 更进一步,c编译器把字符常量等同于整数常量处理: putchar(10) 同 putchar('\n') 等效。 但是,C++中, sizeof('c') == 1, 补充说明一点, sizeof(wchar_t) ==4。 因此可以很容易代表65,536个不同的Unicode字符。 另外,C++中,区别函数不仅要看他的函数名,更要看它的参数。因此,putchar(10)调用的是putc
阅读全文
摘要:今年九月就要开始找工作了,感到压力巨大。回顾这些年所学的东西,零零散散,是懂非懂。很有必要归纳整理下,温故而知新。因此,需要有毅力来完成我自己定下的180天计划。 自己几天前头脑风暴了下,用思维导图大致整出了所需要的两块重要技能,分为两块,技术、非技术。因此,涅槃计划也是一样的。技术类编程语言类C 语言--------------为何不精通C? 系列C++语言----------C++ Annotation 数据结构、算法基本数据结构及算法面试题中常考的算法类型总结acm 题剖析设计模式操作系统Linux(着重)Windows计算机网络数据库mysql非技术类公务员行测题面试在温故的同时,同.
阅读全文
摘要:前言 学习C语言,指针绝对是一道大坎,很多人谈指针色变,使用起来小心翼翼的。“一切指针都是纸老虎” ,同时,对我们得“在战略上藐视指针,战术上重视指针”。本文先剖析下一维数组和指针,多维的情况后序博客继续更新。文章流程:1、辨析指针和数组的不同2、辨析它们相同的时刻3、总结指针和数组为什么这么纠缠不清 首先说一点,指针的使用等同于数组的情况远远多于他们不同的情况,因此,在初学时,为了容易理解,很多人都说 “指针=数组”。 但是,这却是错误的!来个例子吧:// file1.c 定义一个数组arrayint array[100];以上是在文件1中的定义// file2.c 声明file1.c中的a
阅读全文
摘要:对于复杂的C函数声明,或者被typedef别名后的声明,很多人往往一头雾水。本文主要解析下C语言中声明过程所遵循的原则。声明 引用《C专家编程》的第三章内容,说明下声明的优先级规则:声明从它的名字开始读,然后按照优先级顺序依次读取。优先级从高到底依次为:括号包围的地方后缀操作符:括号()表示是一个函数方括号[]表示是一个数组前缀操作符:星号*表示类型是 指向....的指针若const/volatile关键字的后面紧跟类型说明符(int,float),那么其作用于类型,在其他情况下,作用于其左边紧邻的指针星号。不过,我觉得这个规则的不够通俗,看了《C++Annotation》中关于const的.
阅读全文
摘要:本文主要将两个部分,符号重载和运算优先级问题,这两个问题很常见,很繁琐。我猜绝大部分的人在学习时都选择性忽略该章节的内容。但是在面试时,却常常考这方面的东西,因为,“精通”之名。 C中,具备着符号重载,符号重载是体现在程序上下文语境中,不同符号表现出不同的含义。比如“*”,具备三个含义:声明指针,指针解引,乘号。 《C专家编程》总结了下所有的符号重载,用以理清C语言作用域规则:符号意义static函数内部:表示仅在首次调用声明该变量,在此后调用中保持传承函数定义:该函数仅在本文件中可见extern函数定义:表示全局可见(默认属性,extern可省略)变量声明:仅说明该变量在其他地方定义。voi
阅读全文
摘要:引言--- 一直以来,我以为能在简历上写上“精通C语言”, 可是,朋友都劝阻说,还是写“熟悉or掌握”吧,要不然,会被问得很死的。我算是没认清现实吧,去网上找了些题,看了看,大体脉络掌握还行,但是细节部分,就很差劲了。我想起了段誉和慕容复的故事:“段誉仅精通六脉神剑,却稳胜以彼之道还施彼身的慕容复”。 C 语言既然作为我"Hello World!" 的引路人, 我很想说,我很想,精通你。主要阅读材料: 《C专家编程》主要记录我还未掌握,或者掌握不精的内容。1, 合法的赋值形式, 类型的兼容问题来源:1 foo(const char** p){}2 main(int argc
阅读全文

浙公网安备 33010602011771号