List

来源:互联网 发布:永远神剑2知乎 编辑:程序博客网 时间:2024/04/27 19:33
#include<iostream>using namespace std;const int DefaultSize = 100;class List{public:    List();    List(size_t size);    List(List &L);    ~List();    bool insert(const int);    void ClearList();    bool IsEmpty();    size_t ListLen();    int GetElem(size_t);    void append(size_t,int);//在第i个位置插入数值    void Display();    void remove(size_t);    List merge(List &L);    int FindElem(int elm);private:    size_t MaxSize;    size_t list_len;    int *element;};List::List(){    MaxSize = DefaultSize;    list_len = 0;    element = new int[MaxSize];}List::List(size_t size){    MaxSize = size;    list_len = 0;    element = new int[MaxSize];}List::List(List &L){    list_len = 0;    size_t L_size = L.ListLen();    MaxSize = 2*(list_len+L_size);    element = new int[MaxSize];    for (size_t i = 0; i != L_size; ++i)    {        insert(L.GetElem(i));    }}List::~List(){    delete []element;}bool List::insert(const int a){    if (list_len == MaxSize)        return false;    element[list_len++] = a;    return true;}bool List::IsEmpty(){    return list_len == 0;}int List::GetElem(size_t size){    if(size > list_len)        throw runtime_error("error");    return element[size];}void List::Display(){    if(IsEmpty())        cout << "List is empty" << endl;    else        for (size_t i = 0; i < list_len; ++i)            cout << element[i] << " ";}size_t List::ListLen(){    return list_len;}void List::append(size_t i, int num){    if(i < 0 || i > MaxSize)    {        cout << "append invalid" << endl;    }    if (i == list_len)    {        this->insert(num);    }     else    {        for(size_t j = list_len-1; j != i-2; --j)        {            if(j == list_len-1)                this->insert(element[j]);            else                element[j+1] = element[j];        }        element[i-1] = num;    }}void List::remove(size_t i){    if(i < 0 || i > list_len)    {        cout << "remove invalid" << endl;    }    else    {        for(size_t j = i; j != list_len+1; ++j)        {            element[j-1] = element[j];        }        --list_len;    }}List List::merge(List &L){    if(L.IsEmpty())        return *this;    size_t size = list_len + L.ListLen();    List merge_L(MaxSize+L.ListLen());    for (size_t i = 0; i != size; ++i)    {        if (i < list_len)        {            merge_L.insert(element[i]);        }         else        {            merge_L.insert(L.GetElem(i-list_len));        }    }    return merge_L;}int List::FindElem(int elm){    for (size_t i = 0; i != list_len; ++i)    {        if (element[i] == elm)            return i+1;    }    return -1;}int main(){    List l,m;    l.insert(11);    l.insert(12);    m.insert(13);    m.insert(0);    List Q(l.merge(m));    Q.Display();    cout << endl;}