1、数据结构学习(C+)线性链式结构总结(代后记)【1】 happycock(原作) 转自 CSDN 看到这个标题,有些人一定松了一口气这小子可算白话完了,当然了,你要是略有惋惜之情,我真是受宠若惊。但不论你怎么想,写到这里只是告一段落,并没有完,后面还有很大一部分呢,比如树、图、查找、排序这么多年了,还是这点东西。代后记的意思是,我觉得对前面线性链式结构的总结,对后面的学习有指导意义:从前面的学习中,你能得出如何学习数据结构,以及如何正确看待这门课如果你能从重复建设中看到这样做的价值,你才能真正理解这门课的意义。在开始总结前,先整理一下以前的代码,假定你使用的是 VC6,你的工程中现在应该有这几
2、个主要文件:Node.h、List.h 、Stack.h、Queue.h 、CircList.h 、DblList.h、Polynomial.h、Expression.h、Matrix.h,一个含有 main()的 cpp 文件。其他的是一些测试文件和一些应用,比如Simulation.h。如果你用的不是 VC6,你一定背地里咒骂我多少次了,因为一大堆 error 和warning。我当初发布的时候,并没有考虑到不同编译器的差异,我觉得只要光使用标准库(仅仅用了 iostream.h 和 stdlib.h) ,不写怪怪的代码,通用性应该不是问题,但实际上不是这样。所以,我不得不花一些篇幅介绍如
3、何修改以前的代码,所以,这篇文章就只能是【1】了;不过,后面有一个计时器类的源码,就算是一点补偿吧。VC6、BCB6、Dev-cpp 的编译器的差异这些应该是目前 Win32 下最常用的 IDE 环境了,各自的编译器分别是CL.exe、 BCC32.exe、G+.exe (就是 GNU C+) 。我没装 BCB6,所以只是拿 BCC32 来代替。VC6 时间比较早(98 年) ,对 C+标准支持不是很完善,例如下面的代码:for (int i = 1; i class Timerpublic:Timer() QueryPerformanceFrequency( inline void Star
4、t() QueryPerformanceCounter( inline double GetTime()QueryPerformanceCounter(return (double)(timerE.QuadPart - timerB.QuadPart) / (double)Frequency.QuadPart * 1000.0;private:LARGE_INTEGER timerB, timerE, Frequency;#endif这个类使用很简单,就和秒表一样,先 Start(),然后就可以用 GetTime()不断读出逝去的时间;再一次 Start(),重新开始计时。计时单位是 ms。现
5、在,让我们测试一下哪个编译器编译的程序运行的更快。后面部分,请爱惜时间的人不要看,就当我在说梦话。 测试程序#include “simulationTest.h“#include “Timer.h“int main()Timer a;double t = 0;for (int j = 0; j using namespace std; deque empty() push_back() pop_front()另外要把 Simulation:Run()中的结果输出注释掉( PrintResult();)在我的机器上(C500、192RAM、Win2000sp3,关掉其他前台程序)结果如下:IDE
6、 或者编译器 BCC32 BCC32-STL VC6 VC6-STL可执行文件大小(byte) 142,848 145,920 61,440 65,536第一次测试结果(ms) 32.4848 42.325 35.4724 44.448第二次测试结果(ms) 32.6191 41.4752 35.662 45.084递三次测试结果(ms) 32.8919 41.9856 34.7238 43.9707结果表明 BCC32 编译的略比 VC6 快一点,可是文件大小实在(没有比较 Dev-cpp,是因为这么比较对它不公平,另外 400 多 K 的生成文件,60 多 ms 的结果实在拿不出手)这有一
7、部分原因是我的代码造成的,例如运行简单的数学运算测试#include #include “Timer.h“int main()Timer a;a.Start();double s = 0, t;for (int i = 1; i options-Directories-Include files,将 C:SGISTL(你解压的目录)添加进去,然后,将这个路径移到最顶端,就 OK 了。还要注意的是,用 VC6 使用 SGISTL ,文件中不能包含,要用代替(该死的标准) 。如果你想用 VC6 的 STL,只需要将C:SGISTL 移到底端就行了,真是太简单了(这就是 IDE 的好处) 。BCC32 就没这么容易了,BCB6 我没试,所以我不知道它的 IDE 环境有没有解决方案。综上所述,如果你开始在 Win32 上学习 C+,VC6 是最佳选择,强大的功能,简洁的界面,很高的性能(使用 SGISTL 就更好了) 。至于以后你是用 VC 还是 BCB,那就是看你的应用方向和个人喜好了。哎,又一篇垃圾文章问世了。另,STL 都是源码格式的,哪位高人研究过为什么 SGI STL 的性能非常好吗?告诉我一下,那种源码看得让人眼晕。