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