[译]CLinkedList-双链表列表类
环境:
Visual Studio,所有的windows平台
随着时间的推移,所有的程序员、工程师和其他的代码作者都已经接受并完全理解了C/C++编码领域中的一些抽象数据类型。有些人喜欢使用自己定义的抽象数据类型,另外一些人喜欢使用标准模板库(STL)或其他地方提供的一些现有算法。我自己的代码列表也随着时间的推移而发展,我相信这套特殊的双链接列表代码应该能提供任何开发者所需要的大部分完整功能。
在C++出现之前(是的,这表明我有多老),这个源代码开始了它早期的 "C "语言版本,随后是STL及其相关的容器类、模板、算法等等。因此,CLinkedList类是非常稳定的,如果你认为STL已经够用了,请继续使用STL。然而,如果你的产品需要更好的性能,或者是需要在一个遗留产品上的解决方案,那么CLinkedList类绝对值得一看,因为它与相同功能的STL函数调用的数量相比,几乎没有处理开销。
对于那些正在阅读这篇文档的STL用户来说,在写这些例子的时候,我没有把类和模板使用方式放在首位,因此大量使用类型转换的列表返回数据。对于这一点,我向这些用户/读者表示歉意。我的目的是展示功能,而不是风格或其他编程习惯。另外,如果你编译这个项目,其输出结果是要有可读性的。
源代码基本上是完全注释的。此外,还有一套HTML版本的帮助文件,其中包括许多示例代码。
下面是CLinkedList类成员函数的列表,祝您编码愉快!
Constructor(...) 构造函数
int dladd( void* data ) 在list中添加节点
int dladdins( void* data ) 使用插入排序添加节点。
int dlatmark( void ) 检查是否在先前标记的节点之前
void* dlbsearch( void* data ) 对列表进行二分搜索
long dlcount( void) 返回列表中的节点数
int dlclear(void) 删除所有节点
int dldelete( void ) 删除当前节点
void* dlfind( void* data ) 通过数据查找节点
void* dlget( void ) 获取当前节点的一个副本
void* dlgoback( void ) 向后遍历
void* dlgofwd( void ) 向前遍历
int dlinsert( void* data ) 在当前点插入节点
int dlmark( void ) 标记节点
long dlposn( void ) 返回节点位置
int dlqsort( void ) 使用qsort()对整个列表进行排序
int dlreplace( void* data ) 使用提供的data替换当前节点
int dlrewind( void ) 倒退到列表开头
int dlsetcompare( pfunction )修改排序比较函数
int dlsort( void ) 使用原始的交换算法对列表进行排序
bool dlsorted( void ) 该列表是否是有序的,返回true/false
void* dltofirst( void ) 跳转到第一个节点
void* dltolast( void ) 跳转到最后一个节点
int dltomark( void ) 跳转到上一个标记的节点
int dlunmark( void ) 取消标记一个先前的节点
int DumpMemory( ) 输出一些内存的内容
int dldumplist( void ) 输出整个列表的内容
int dldumpnode( void ) 输出单个节点的内容
int operator<<( void* ) 和dladd()方法作用相同
void* operator[]( long ) 队列访问操作符
void* operator++( int ) 等价于dlgofwd()
void* operator--( int ) 等价于dlgoback()