数据结构-C++实现(一):数组链表

来源:互联网 发布:get music软件 编辑:程序博客网 时间:2024/05/21 21:01

数据结构C++实现第一发,主要有几部分构成,分别是一个抽象类LinearList.h、数组链表的头文件ArrayList.h以及main.cpp源文件。

LinearList.h文件具体信息如下:

ArrayList.h文件如下:

简单的测试如下:

#include <iostream>#include "ArrayList.h"template <typename T>void resizeLength2D(T**& a,int oldRow,int oldCol,int newRow,int newCol){    T** tmp = new T*[newRow];    int r = min(oldRow,newRow);    int c = min(oldCol,newCol);    for(int i = 0;i<newRow;i++)        tmp[i] = new T[newCol];    for(int i = 0;i<r;i++)    {        copy(a[i],a[i]+c,tmp[i]);    }    for(int i = 0;i<oldRow;i++)        delete [] a[i];    delete [] a;    a = tmp;}int main(){    ArrayList<int> ia(5);    ia.insert(0,1);ia.insert(0,2);ia.insert(0,3);ia.set(3,0);    std::cout << ia << std::endl;    for(auto i = ia.begin();i!=ia.end();++i)        std::cout << *i << " ";    ArrayList<int> ib(ia);    cout << (ia!=ib) << endl;    /*    //test resizelength2d    int** a;    a = new int* [3];    for(int i =0;i<3;i++)        a[i] = new int[3];    resizeLength2D(a,3,3,4,4);     */    return 0;}
这里我对ArrayList类里的函数做一些说明;

element代表存储元素,arrayCapacity表示容量大小,listsize表示数组实际大小,capacity是要比listsize大的,相当于留有一些裕量,这一点和stl的vector类似。addsize表示listsize达到一定大小后,单次对capacity扩容的大小。checkIndex()函数后续用于检测索引值是否有效。

然后是public部分,内嵌类iterator为数组链表定义了迭代器,begin()以及end()的设置与stl的容器相同。

构造函数ArrayList()中有两个参数,一个代表预先给capacity的大小,另一个设置的是单次扩容值,如果缺省,则默认每次扩容时将capacity翻倍。析构函数,清空element元素。

接下来时覆写抽象类成员函数的部分,empty()函数返回当前数组是否为空,为空返回true;size()函数返回当前的数组大小,这里的大小时listsize,不是容量。get()函数返回指定索引处的值;indexof()返回目标值的第一个索引,若目标不在数组中,返回-1;erase()擦除指定index的数据,相应更改数组大小与容量;insert()在指定索引处插入值;output()函数将数组元素依次输出;

接下来是非构造拷贝析构函数、同时也不是覆写的成员函数。capacity()函数返回容量值,set()设定指定索引处的值;trimToSize()函数将容量设置为与listsize大小一i样;setSize()函数使得数组大小等于指定大小。

最后是几个运算符的重载,应该能看懂。另外,还有一个输出流的运算符的重载,定义在类外。

0 0