数据结构-C++实现(二):单向链表

来源:互联网 发布:上古卷轴5男捏脸数据 编辑:程序博客网 时间:2024/05/21 18:34

和数组不同,链表的数据结构内部多了一个指针指针下一个位置,使得在链表中插入删除特定位置的元素效率很高,代码实现依旧分为三个部分,抽象类LinearList.h,模板类chain.h以及main函数源文件。

废话不多说,我们看代码,这次LinearList.h抽象类里面多了两个成员函数一个是push_back(),一个是clear():

然后是chain.h,单向链表的模板类:

随便写的测试:

#include <iostream>#include "chain.h"int main(){    chain<int> ic;    ic.insert(0,1);ic.insert(0,2);ic.push_back(3);ic.push_back(4);    chain<int> ic1(ic);ic1.reverse();    cout << ic1 << endl;    return 0;}
我发现写这个还是很锻炼人的,一个完善的数据结构轻轻松松几百行代码,每天一发,感觉很酸爽,C++简直写上瘾。

不废话了,我们回归头来看看链表的头文件里都定义了啥:

chainNode类定义了节点类,包含数据成员以及指向下一个节点的指针。包含构造、拷贝以及析构函数。

chan类继承自LinearList抽象类,包含节点类的成员变量,以及一个嵌套类iterator。

成员函数分为几个部分,首先是构造、拷贝以及析构函数,值得注意的是在构造函数中有一个参数initCapacity,实际是无作用的,仅仅为了和之前的ArrayList一致。

然后是继承自抽象类的方法,和ArrayList中的区别不大。

最后是我做的几个习题,voidremoveRange(intfromIndex,inttoIndex)的作用是将参数限定范围内的节点删除的操作。intlastIndexOf(constT& theElement)是返回与函数参数相等的最后一个位置的索引。T&operator[](intindex) const是对[]运算符进行重载,返回指定索引的节点的数据的引用。voidreverse()是将整个链表进行反转的操作,要求不开辟多余的空间。



0 0