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