Linked List 的sample codes
#include<iostream> using namespace std; template<class T> class LinearList{ public: LinearList(int MaxListSize = 10); ~LinearList() {delete [] element;} bool IsEmpty() const {return length == 0;} int Length() const {return length;} bool Find(int k, T& x) const; int Search(const T& x) const; LinearList<T>& Delete(int k, T& x); LinearList<T>& Insert(int k, const T& x); void Output(ostream& out)const; private: int length; int MaxSize; T *element; }; //超出内存 class NoMem{ public: NoMem(){} }; void my_new_handler(){ throw NoMem(); }; class OutOfBounds{ public: OutOfBounds(){} }; template<class T> LinearList<T>::LinearList(int MaxListSize){ MaxSize = MaxListSize; element = new T[MaxSize]; length = 0; }; template<class T> bool LinearList<T>::Find(int k, T& x)const{ if(k<1 || k>length) return false; x = element[k-1]; return true; }; template<class T> int LinearList<T>::Search(const T& x)const{ for(int i=0; i < length ; i++) if(element[i]==x) return ++i; return 0; }; template<class T> LinearList<T>& LinearList<T>::Delete(int k, T& x){ if(Find(k,x)){ for(int i=k; i<length ; i++) element[i-1]=element[i]; length--; return *this; } else throw OutOfBounds(); }; template<class T> LinearList<T>& LinearList<T>::Insert(int k, const T& x){ if(k<0 || k>length) throw OutOfBounds(); if(length == MaxSize) throw NoMem(); for(int i= length-1;i>=k;i--) element[i+1]=element[i]; element[k] = x; length ++; return *this; }; template<class T> void LinearList<T>::Output(ostream& out)const{ for(int i=0;i<length;i++) out << element[i]<<" "; }; template<class T> ostream& operator<<(ostream& out, const LinearList<T>& x){ x.Output(out); return out; }; int main(){ try{ LinearList<int> L(5); cout<<"Length = "<<L.Length()<<endl; cout<<"IsEmpty = "<<L.IsEmpty()<<endl; L.Insert(0,2); L.Insert(1,6); cout<<"List is "<<L<<endl; cout<<"IsEmpty = "<<L.IsEmpty()<<endl; int z; L.Find(1,z); cout << "First element is "<<z<<endl; cout << "Length = "<<L.Length()<<endl; L.Delete(1,z); cout<<"Delete element is "<<z<<endl; cout<<"List is "<<L<<endl; } catch(...){ cerr<<"An exception has occurred"<<endl; } cout << "Output is called !" << endl; return 0; }
posted on 2013-01-03 12:11 cosmo89929 阅读(174) 评论(0) 编辑 收藏 举报