几个 C++ 的数据结构类(下载)

来源:互联网 发布:戴尔笔记本连不上网络 编辑:程序博客网 时间:2024/06/18 16:18

如需转载请与作者联系

几个 C++ 的数据结构类 8 月 17 日更新

作者:郑炜 pro_zw@sina.com.cn

代码下载

声明:使用这些类是使用者的自愿行为,作者对源代码的质量不提供任何形式的保证,如果使用者因使用这些类而造成的任何损失都与作者无关,作者不承担任何责任。

array.h: 安全数组,可自动增长大小(可随机访问,但扩充时效率很低,所以在初始化时尽量选择合适的大小)

linkedlist.h: 普通链表(可随机访问,但随机访问效率很低,是通过循环到指定位置来实现的)

dclinkedlist.h× 双向循环链表(不可随机访问,但可正向、反向循环,且大部分操作比普通链表效率高,推荐使用)

hashtable.h: 哈希表(使用键值标识元素,键值一样的元素即认为是同一元素)

set.h: 集合(从 dclinkedlist 派生,基本一样,只是插入时保证元素不会重复)

stack.h: 堆栈(内部使用 dclinkedlist 成员,所以代码很简单且不会溢出)

binstree.h: 二叉搜索树(元素不会重复)

avltree.h×: AVL 平衡树(元素不会重复)

gentree.h×: 一般树(使用二叉树方法实现的一般树)

DFA.h: 通用自动机(以 hashtable 实现的自动机)

×双向循环链表虽然所占内存比普通链表要大,但大部分操作都要比普通链表效率高,如果不需要随机访问,推荐使用(其实链表的随机访问效率是很低的,如果经常需要随机访问,还是使用安全数组),hashtable.h 由于代码的特殊原因,难以使用双向循环链表(以后再看吧),注意双向循环链表是如何判断到达链表尾的。

×AVL 树的插入函数成本非常高,且该类没有完全实现(例如,删除函数),但 AVL 的搜索效率极高,所以适用于在程序开始前初始化程序中经常要搜索的数据集合,一般应用二叉搜索树已经足够了。

×一般树由于不是线性表,所以很多函数、使用方法都和其它类不太相同(其实二叉搜索树和 AVL 平衡树都可看成线性表,但一般树不是)

所有类均使用模板编写,并不特定于 Windows 平台,所有只要有 C++ 编译程序的操作平台都可使用。

以上代码都是作者照书上改写的,并未经过严格测试,如果在使用过程中发现任何问题、困难、源代码错误或可改进的地方,非常欢迎来信与我讨论。电子邮件地址:pro_zw@sina.com.cn。

作者会根据所发现的问题不断改进各类并增加新的数据结构,使其不断完善。

使用者也可根据需要随意更改各代码,但希望发给本人更改后的结果,这也是希望能够参考各方面的意见而改进各类的代码,并没有其他意思。

参考书目:

《数据结构-C++ 语言描述》 William Ford William Topp 著 清华大学出版社

《计算机程序设计艺术》 DONALD E.KNUTH 著 清华大学出版社

 
原创粉丝点击