目录
一、线性表
1.1 线性表的定义
线性表(linear list):它的每一个实例都是元素的有序
集合,其实例形式为: ( e 0 , e 1 , … , e n − 1 ) (e_0,e_1,…,e_{n-1}) (e0,e1,…,en−1),其中n 是有穷自然数。
线性表 の 常见操作:
- 创建线性表
- 撤销线性表
- 判断是否为空
- 确定长度
- 根据索引查找元素
- 根据元素确定索引
- 根据索引插入、删除元素
- 按某种顺序打印线性表元素
- ……
1.2 线性表的ADT
抽象数据类型:
抽象数据类型LinearList
{
实例
有限个元素的有序集合,实例形式为:(e0,e1,…,en-1)
操作
empty(): 如果表为空则返回true,否则返回false
size(): 返回表的大小(即表中元素个数)
get(index): 返回表中索引为index的元素
indexOf(x): 返回表中第一次出现的x的索引;如果x不在表中,则返回-1
erase(index): 删除表中索引为index的元素,索引大于index的元素其索引值减1
insert(index, x): 把x插入到表中索引为index的位置上,索引大于等于index的元素其索引值加1
Output(out): 从左到右输出表中元素
}
对应的抽象类LinearList:
template <class T>
class linearList{
public:
virtual ~linearList(){
};
// 表空返回true,否则返回false
virtual bool empty() const =0;
// 返回表中元素个数
virtual int size() const = 0 ;
// 返回索引为index的元素
virtual T& get(int index) const = 0;
// 返回ele第一次出现的索引,若无则返回-1
virtual int find(const T& ele) const = 0;
// 删除索引为index的元素,其后所有元素索引-1
virtual void erase(int index) const = 0;
// 插入元素ele,后续元素索引+1
virtual void insert(int index, T& ele) = 0;
// 从左到右插入表中元素到输出流out
virtual void Output(out) const = 0;
}
二、线性表的数组描述
2.1 数组描述:
- 也叫公式化描述 / 顺序存储
- 使用
数组
来存储线性表对象的每个实例 - 元素在数组中的位置用一个数学公式来指明——>
映射公式
2.2 几种典型的映射公式
- l o c a t i o n ( i ) = i location(i) = i location(i)=i,第i个元素位于数组第i个位置
- l o c a t i o n ( i ) = a r r a y L e n g t h − i − 1 location(i) = arrayLength - i - 1 location(i)=arrayLength−i−1,即从数组的末尾倒序存放元素
- l o c a t i o n ( i ) = ( l o c a t i o n ( 0 ) + i ) % a r r a y L e n g t h location(i) = (location(0)+i) \% arrayLength location(i)=(location(0)+i)%arrayLength,将数组看成一个首尾相接的环,按照顺序依次存放
2.3 数组描述的线性表——arrayList
template <class T>
class arrayList : public linearList<T>
{
public:
//构造函数、复制构造函数、析构函数
arrayList(int initialCapacity = 10);
arrayList(const arrayList<T>&);
~arrayList() {
delete [] element;}
//ADT方法
bool empty() const {
return listSize = = 0;}
int size() const {
return listSize;}
// 按值查找
T& get(int theIndex) const;
// 按位查找
int indexOf(const T& theElement) const;
void erase(int theIndex);
void insert(int theIndex, const T& theElement);
void Output(ostream& out) const;
//其他方法
int capacity() const {
return arrayLength;}
protected:
void checkIndex(int theIndex<