1 线性表定义
线性结构:线性结构中的元素之间的关系是一对一的关系。
线性表(linear list):也称有序表(order list),它的每一个实例都是元素的一个有序集合。每一个实例的形式为(e0,e1,e2,...,en-1),其中n是有穷自然数,ei是线性表的元素,i是线性表元素ei的索引,n是线性表的大小或长度。元素可以被看做原子,它们本身的结构与线性表的结构无关,但是必须是同一种类型。当n为0时,线性表为空;当n>0时,e0是线性表的首元素,en-1是线性表的最后一个元素。可以认为e0先于e1,e1先于e2。除了这种先后关系外,线性表不在有其他关系。一般来说,第一个元素无前驱,最后一个元素无后驱,其他每个元素都有且只有一个前驱和后驱。
1.1 线性表的抽象数据类型
一个线性表可以用一个抽象数据类型(abstract data type,ADT)来说明,既说明它的实例,也说明对他的操作。这里省略了对创建一个实例和撤销一个实例的操作说明。
ADT linearList
{
实例
有限个元素的有限集合
操作
empty();若为空,则返回true,否则返回false
size();返回线性表的大小(表的元素个数)
get(index);返回线性表中索引为index的元素
indexOf(x);返回线性表中第一次出现x的索引。若不存在,则返回-1
erase(index);删除索引为index的元素,索引大于index的元素其索引减1
insert(index,x);把x插入线性表中索引为index的位置上,索引大于等于index的元素其索引加1
};
以下为一个线性表的抽象类
template<class T>
class linearList
{
public:
virtual ~linearList() {};
virtual bool empty() const = 0;
//返回true,当且仅当线性表为空
virtual int size() const = 0;
//返回线性表的元素个数
virtual T& get(int theIndex) const = 0;
//返回索引为theIndex的元素
virtual int indexOf(const T& theElement) const = 0;
//返回元素theElement第一次出现时的索引
virtual void erase(int theIndex) = 0;
//删除索引为theIndex的元素
virtual void insert(int theIndex, const T& theElement) = 0;
//把theElement插入线性表中索引为theIndex的位置上
};
2 线性表的顺序存储结构
指的是用一段地址连续的存储单元依次存储线性表的数据元素。其实用数组来存储线性表的元素。
要创建一个数组类(如vector) ,以实现抽象数据类型linearList,必须首先选择数组element的类型和数组长度。使用模板可以很好解决