1.概述
C++程序常用的数据描述方法是数组描述和链式描述。本文研究线性表的数组描述。
数组描述方法将元素存储在一个数组中,用一个数学公式来确定每个元素存储的位置即在数组中的索引,所有元素存储在一片连续的存储空间中,这就是顺序表。
2.线性表的数据结构
首先理解对线性表可实施的操作,一个线性表的抽象类代码如下:
template<class T>
class linearList
{
public:
virtual ~linearList(){};
virtual bool empty()const=0;
virtual int size()const=0;
virtual T & get(int theIndex)const=0;
virtual int indexOf(const T & theElement)const;
virtual void erase(int theIndex())=0;
virtual void insert(int theIndex,const T & theElement)=0;
virtual void ouput(ostream & out)const=0;
};
3.数组描述
3.1 数组的每一个位置都可以存储线性表的一个元素,因此需要一个映射,使线性表的一个位置对应于数组的一个位置。
例如:location(i)=i; 即第i个线性表元素在数组中的存储位置是i.这也是最自然的选择。
当然也可以使用其他的公式,使得线性表的元素在数组中从后向前存储,如 location(i)=arrayLength-i-1;
或者从数组的某一个位置开始,环绕到数组头来存储线性表元素,如 location(i)=(location(0)+i)%arrayLength,此处不再详细说明。
要创建一个数组类,来实现抽象类型linearList,必须首先选择element的类型和数组长度。
前者使用模板类来实现,后者使用动态数组来实现,可避免空间分配不足.
3.2 改变数组的长度算法:首先建立一个具有新长度的数组,然后将数组a的元素复制到这个新数组中,最后改变数组a的值,使它能够引用新数组。源代码如下:
template<class T>
void changeLength1D(T*&am