代码所示为模板类,无法直接编译。我感觉学习数据结构主要还是学习各种数据结构的原理,至于只用是比较简单的。

        顺序表AList是由线性表List抽象类继承来的。从代码数量上就能够看出AList类中insert和remove方法是比较重要的。将顺序表看成由两部分构成,在AList类中定义了fence属性,是为了定义当前元素的概念,同时也助于修改线性表的表示形式。

       insert函数的实现是先判断表是否达到最大的数量限制,如果是则返回false,表示不能在表中插入元素。否则从后向前遍历顺序表(因为如果从前往后的话,在赋值的时候前面的元素值就将后面的给覆盖了,后面的那个元素就无法继续向后赋值了)然后将前一个位置的元素赋给后一个位置,意思就是将顺序表从fence开始向后移动一个位置,最后将要插入元素赋给fence位置。即完成了插入操作。当然要注意将表的元素个数加一这种细节。

       remove函数也是先要判断表是否为空,若为空则无法完成移除操作。若不为空则将要移除的元素保存下来,然后遍历表,从fence位置开始,依次将后一个位置的元素赋给前一个元素,实际上相当于将想要移除的元素用后面的元素给覆盖了。

 
  1. //List abstract class  
  2. template <class Elem> class List 
  3.     public
  4.         //virtual void clear() = 0; 
  5.         virtual bool insert(const Elem&) = 0; 
  6.         virtual bool append(const Elem&) = 0; 
  7.         virtual bool remove(Elem&) = 0; 
  8.         virtual void setStart() = 0; 
  9.         virtual void setEnd() = 0; 
  10.         virtual void prev() = 0; 
  11.         virtual void next() = 0; 
  12.         virtual int leftLength() = 0; 
  13.         virtual int rightLength() = 0; 
  14.         virtual bool setPos(int pos) = 0; 
  15.         virtual bool getValues(Elem&) = 0; 
  16.         virtual void print() const = 0;  
  17. }; 
  18.  
  19. template <class Elem> 
  20. class AList : public List<Elem> 
  21.     private
  22.         int maxSize; 
  23.         int listSize; 
  24.         int fence; 
  25.         Elem *listArray; 
  26.     public
  27.         AList(int size=DefaultListSize) 
  28.         { 
  29.             maxSize = size; 
  30.             listSize = fence = 0; 
  31.             listArray = new Elem[maxSize]; 
  32.         } 
  33.         ~AList() 
  34.         { 
  35.             delete [] listArray; 
  36.         } 
  37.         bool insert(const Elem&); 
  38.         bool append(const Elem&); 
  39.         bool remove(Elem&); 
  40.         void setStart(); 
  41.         void setEnd(); 
  42.         void prev(); 
  43.         void next(); 
  44.         int leftLength(); 
  45.         int rightLength(); 
  46.         bool setPos(int pos); 
  47.         bool getValues(Elem&); 
  48.         void print() const;  
  49. }; 
  50.  
  51.  
  52. template <class Elem> 
  53. bool  AList<Elem>::insert(const Elem& item) 
  54.     if(listSize==maxSize) 
  55.         return false
  56.     for(int i=listSize;i>fence;i--) 
  57.         listArray[i] = listArray[i-1]; 
  58.     listArray[fence]=item; 
  59.     listSize++; 
  60.     return true
  61.  
  62. template <class Elem> 
  63. bool  AList<Elem>::append(const Elem& item) 
  64.     if(listSize == maxSize) 
  65.         return false
  66.     listArray[listSize++]=item; 
  67.         return true
  68.  
  69. template <class Elem> 
  70. bool AList<Elem>::remove(Elem& it) 
  71. {  
  72.     if(rightLength() == 0) 
  73.         return false
  74.     it=listArray[fence]; 
  75.     for(int i=fence;i<maxSize;i++) 
  76.         listArray[i]=listArray[i+1]; 
  77.     listSize--; 
  78.     return true;     
  79.  
  80. template <class Elem> 
  81. void AList<Elem>::setStart() 
  82.     fence=0; 
  83.  
  84. template <class Elem> 
  85. void AList<Elem>::setEnd() 
  86.     fence=listSize; 
  87.  
  88. template <class Elem> 
  89. void AList<Elem>::prev() 
  90.     if(fence!=0) 
  91.         fence--; 
  92.  
  93. template <class Elem> 
  94. void AList<Elem>::next() 
  95.     if(fence<=listSize) 
  96.         fence++; 
  97.  
  98. template <class Elem> 
  99. int AList<Elem>::leftLength() 
  100.     return fence; 
  101.  
  102. template <class Elem> 
  103. int AList<Elem>::rightLength() 
  104.     return (listSize-fence); 
  105.  
  106. template <class Elem> 
  107. bool AList<Elem>::setPos(int pos) 
  108.     if((pos >= 0)&&(pos <=listSize)) 
  109.         fence=pos; 
  110.     return ((pos >=0)&&(pos <=listSize)); 
  111.  
  112. template <class Elem> 
  113. bool AList<Elem>::getValues(Elem& it) 
  114.     if(listSize==0) 
  115.         return false
  116.     it=listArray[fence]; 
  117.     return true
  118.  
  119. template <class Elem> 
  120. void AList<Elem>::print() const 
  121.     int temp=0; 
  122.     cout<<"In AList:<"
  123.     while(temp < fence) 
  124.         cout<<listArray[temp++]<<" "
  125.     cout<<"|"
  126.     while(temp < listSize) 
  127.         cout<<listArray[temp++]<<" "
  128.     cout<<">\n"