主要参考书是«数据结构(用面向对象方法与c++描述)»殷人昆等编著,清华大学出版社.原书看起来很费事,显而易见的把教学目的与提供实例的目的搞混了,结果是个四不象:作为教科书,条理不清晰;提供各个方法的实现,也不是很实用,相反,重复建设太多.但是,这是清华的考研参考书目,一定有许多人与我一样在研读此书.我把我重新定义的类与实现发表出来,就是希望与我一样的人,或者是打算学习数据结构而选择了这本书的人,能更好的理解与学习.当然,如果你想使用这些数据结构,又不想学stl,这些类也能帮你达成目的.
这是第一部分,马上我会完成树等结构.我只测试了int类型各个成员函数的正确性,并且也没做什么“极端测试”,欢迎测试.另外,欢迎反映这样的定义是否好看些,容易懂些. 【程序编程相关:由零开始做 Dialog (SDK版) 】我照着原书的类名与对应的函数名,写下了如下的类的定义,部分代码采用了原书的.把成员函数的实现写在类定义里,完全是为了将就vc++6的classview,不然一双击一个成员函数,就蹦出来“我找不到它的实现”,而实际上,一般我们都看的是classview显示的类的接口,很少去看类的定义. 【推荐阅读:C++机理:虚拟机制的实现[兼谈对比于传】
#define node_h 【扩展信息:跟随鼠标的几个星星,不是很夸张,还可以用】#ifndef node_h
template <class type> class node //单链节点类
{public: type data; node<type> *link; node() : data(type()), link(null) {} node(const type &item) : data(item), link(null) {}};#endif
说明:因为数据结构里用到这个结构的地方太多了,如果用原书那种声明友元的做法,那声明不知道要比这个类的本身长多少.不如开放成员,事实上,这种结构只是c中的struct,除了为了方便初始化一下,不需要任何的方法,原书那是画蛇添足.一点重要的修改:原书的缺省构造函数是这样的node() : data(null), link(null) {} .我原来也是照着写的,结果当我做扩充时发现这样是不对的.当type为结构而不是简单类型(int.……),不能简单赋null值.这样做使得定义的模板只能用于很少的简单类型.显然,这里应该调用type的缺省构造函数. 这也要求,用在这里的类一定要有缺省构造函数.在下面可以看到构造链表时,使用了这个缺省构造函数.当然,这里是约定带表头节点的链表,不带头节点的情况请大家自己思考.
下面可以看到,链表的public部分没有返回node或者node*的函数,所以,别的类不可能用这个开放的接口对链表中的节点操作.
#ifndef list_h
#define list_h#include "node.h"
... 下一页