資料結構 筆記:順序儲存結構的抽象實現
阿新 • • 發佈:2018-11-10
SeqList設計要點
-抽象類模板,儲存空間的位置和大小由子類完成
-實現順序儲存結構線性表的關鍵操作(增,刪,查,等)
-提供陣列操作符,方便快速獲取元素
template <typename T> class SeqList : public List<T> { protected: T* m_array; //順序儲存空間 int m_length; //當前線性表長度 public: bool insert(int i,const T& e) { bool ret = ((0 <= i) && (i <= m_length)); ret = ret && (m_length < capacity()); if(ret) { for(int p = m_length-1;p>=i ; p--) { m_array[ p + 1] = m_array[p]; } m_array[i] = e; m_length++; } return ret; } bool remove(int i) { bool ret = ((0 <= i) && (i < m_length)); if(ret) { for(int p=i;p<m_length-1;p++) { m_array[p] = m_array[p+1]; } m_length--; } return ret; } bool set(int i,const T& e) { bool ret = ((0 <= i) && (i < m_length)); if(ret) { m_array[i] = e; } return ret; } bool get(int i,T& e)const { bool ret= ((0 <= i) && (i < m_length)); if(ret) { e = m_array[i]; } return ret; } int length() const { return m_length; } void clear() { m_length = 0; } //順序儲存線性表的陣列訪問方式 T& operator[] (int i) { if((0 <= i) && (i < m_length)) { return m_array[i]; } else { //丟擲異常 } } T operator[] (int i)const { return (const_cast<SeqList<T>&>(*this))[i]; } //順序儲存空間的容量 virtual int capacity() const = 0; };