顺序表C++模板实现

来源:互联网 发布:淘宝角色管理界面 编辑:程序博客网 时间:2024/06/05 09:08
#include<iostream>using namespace std;const int MAXSIZE = 20;template <class T>class SqList{private:    T *data;    int length;public:    SqList();  //构造函数    ~SqList(); // 析构函数    void CreatList(T a[], int n); //创建顺序表    void Display();  //输出顺序表中所有元素    int GetLength(); //获取顺序表的长度    bool GetElem(int, T &elem); // 获取顺序表中的某个元素    bool ListInsert(int i, T elem); // 插入元素    bool ListDelete(int i, T &elem); //删除元素};template<class T>SqList<T>::SqList(){    cout<<"constract ok"<<endl;    data = new T[MAXSIZE];    length = 0;}template<class T>SqList<T>::~SqList(){    cout<<"No"<<endl;    delete [] data;}template<class T>void SqList<T>::CreatList(T a[], int n){    for(int i = 0; i < n; i++){        data[i] = a[i];    }    length = n;    cout<<"create SqList success!"<<endl;}//获取顺序表的长度template<class T>int SqList<T>::GetLength(){    return length;}//获取指定元素template<class T>bool SqList<T>::GetElem(int i, T &e){    if(length == 0 || i < 1 || i > length){        return false;    }    e = data[i-1];    return true;}//插入元素template<class T>bool SqList<T>::ListInsert(int i, T e){    if(length == MAXSIZE) //保证插入位置正确        return false;    if(i < 1 || i > length+1)        return false;    if(i < length){        for(int k = length-1; k >= i-1; k--)  //将插入位置之后的元素都向后移动一个位置            data[k+1] = data[k];    }    data[i-1] = e;  //将待插入的元素赋值给插入位置    length++;  //将顺序表的长度增加一个    return true;}//删除元素template<class T>bool SqList<T>::ListDelete(int i, T &e){    if(length == 0)  //保证删除位置正确        return false;    if(i < 1 || i > length)        return false;    e = data[i-1];  //将要删除的元素保存给 e    if(i < length){        for(int k = i; k < length; k++){ //将删除位置后面的元素都向前移动一个位置            data[k-1] = data[k];        }    }    length--;  //将顺序表的长度删除一个    return true;}template<class T>void SqList<T>::Display(){    cout<<"display SqList:";    for(int i = 0; i < length; i++){        cout<<data[i]<<"\t";    }    cout<<endl;}//堆中创建对象int main(){    SqList<int> *sqlist = new SqList<int>();    int arr[5] = {3, 4, 5, 6, 7};    sqlist->CreatList(arr, 5);    sqlist->Display();    cout<<"get element length is :"<<sqlist->GetLength()<<endl;    int a;    sqlist->GetElem(2, a);    cout<<"get element is : "<<a<<endl;    sqlist->ListInsert(2, 100);    sqlist->Display();    int b;    sqlist->ListDelete(2, b);    cout<<"delete element is : "<<b<<endl;    sqlist->Display();    delete sqlist;    return 0;}//栈中创建对象int main01(){    SqList<int>sqlist;    int arr[5] = {3, 4, 5, 6, 7};    sqlist.CreatList(arr, 5);    sqlist.Display();    cout<<"get element length is :"<<sqlist.GetLength()<<endl;    int a;    sqlist.GetElem(2, a);    cout<<"get element is : "<<a<<endl;    sqlist.ListInsert(2, 100);    sqlist.Display();    int b;    sqlist.ListDelete(2, b);    cout<<"delete element is : "<<b<<endl;    sqlist.Display();    // delete sqlist;    return 0;}

ps: 顺序表的三种代码实现过程都写完了,其中有学习到了一点新的知识!不错!有问题欢迎指正哦 ^_^

原创粉丝点击