List

#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;
}


你可能感兴趣的:(List)