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编辑  收藏  举报

导航