2.1 线性表的逻辑结构
2.1.1 线性表的定义
线性表:简称表,是n个具有相同类型的数据元素的有限序列。
长度:线性表中数据元素的个数。
空表:长度为0;非空表记作:L=(a1,a2,....,an)
任意一对相邻的数据元素ai-1和ai(1<i<=n)之间存在序偶 关系<ai-1,ai>,ai-1称为ai的前驱,ai称为ai-1的后继。
2.1.2 线性表的抽象数据类型定义
线性表表示一个相当灵活的数据结构,对线性表的数据元素不仅可以进行存取访问,还可以进行插入和删除 作.其抽象数据类型定义:
ADT List
Date
Operation
InitList 功能:线性表初始化
DestroyList 功能:销毁线性表
Length 功能:求线性表的长度
Get 功能:按位查找,在线性表中查找序号为i的数据元素
Locate 功能:按值查找,在线性表中查找值等于x的元素
Insert 功能:插入操作,在线性表的第i个位置插入一个新元素x
Delete 功能:删除操作,删除线性表中的第i个元素
Empty 功能:判空操作,判断线性表是否为空表
PrintList 功能:遍历操作,按序号依次输出线性表中的元素
endADT
注意:对于不同的应用上述操作的接口可能不同,例如删除操作,若要求删除表中值为x的元素,则Delete操作的输入参数就不能是位置而应该是元素值。
2.2 线性表的顺序存储结构----顺序表
顺序表:线性表的顺序存储结构。它是用一段地址连续的存储单元依次存储线性表的数据元素。C++中数组下标是从0开始的,而线性表中元素的序号是从1开始的,即线性表中第i个元素存储在数组中下标为i-1的位置。顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址,计算任意一个元素的存储地址时间是相等的(随机存取)。
2.2.2顺序表的实现
const int MaxSize=100;
template<class T>
class SeqList
{
public:
SeqList(){length=0;}
SeqList(T int a[],int n);
~SeqList(){}
Int Length(){return length;}
T Get(int i);
void Insert(int i,T x);
T Delete(int i);
int Locate(T x);
void PrintList();
private:
T data[MaxSize];
int length;
};
1、 构造函数
无参构造函数SeqList()创建一个空的顺序表,只简单地将顺序表的长度length初始化0
有参构造函数SeqList(T a[],int n)需要将给定的数组元素作为线性表的数据元素顺序表中,并将传入的元素个数作为顺序表的长度。
顺序表有参构造函数SeqList
template<class T>
SeqList<T>::SeqList(T a[],int n)
{
if(n>MaxSize)throw"参数非法";
for (int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
2、 求线性表的长度
只需要返回变量length的值
3、 查找操作
(1)、按位查找:算法的时间复杂度为O(1)
顺序表按位查找算法Get
template<class T>
T SeqList<T>::Get(int i)
{