定义:
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。
顺序结构:将表中元素一个接一个的存入一组连续的存储单元中。
const int M=100;
template <class T>
class Seq{
private:
T data[M]; // 存放数据元素的数组
int length; // 线性表的长度
public:
Seq (); // 无参构造函数
Seq (T a[ ], int n); // 有参构造函数
~Seq (){} // 析构函数为空
int Length (){return length;} // 求线性表的长度
T Get (int i); // 按位查找,取线性表的第 i 个元素
int Locate (T x); // 按值查找,求线性表中值为 x 的元素位置
void Insert (int i,T x); // 在线性表中第 i 个位置插入值为 x 的元素
T Delete (int i); // 删除线性表的第 i 个元素
void PrintList (); // 遍历线性表,按序号依次输出各元素
};
基本操作:
插入:
1 如果顺序表已满,抛出上溢异常
2 如果元素插入位置不存在,抛出位置异常
3 将最后一个元素至第i个元素(i为插入位置)向后移动一个位置
4 将元素插入到i位置
5 将顺序表的长度增1
template <class T>
void Seq<T>::Insert (int i, T x){
int j;
if (length>=M) throw "上溢";
if (i<1 || i>length+1) throw "位置";
for (j=length; j>=i; j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
删除:
1 如果顺序表已空,抛出下溢异常
2 如果元素删除位置不存在,抛出位置异常
3 取出被删除的元素
4 将下标为i,i+1…n-1的元素一次移到i-1,i,…n-2的位置
5 将顺序表的长度减1,返回被删除的元素
template <class T>
T Seq<T>::Delete (int i){
int j;
T x;
if (length==0) throw "下溢";
if (i<1 || i>length) throw "位置";
x=data[i-1];
for (j=i; j<length; j++)
data[j-1]=data[j];
length--;
return x; //有返回值
}
判断是否空表:
int Empty (L)
{
// 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
if(L.length==0)
return TRUE;
else
return FALSE;
}
查找:
1.按值查找:
template <class T>
int Seq<T>::Locate (T x){
for (int i=0;i<length;i++)
if (data[i]==x)
return i+1; // 下标为i的元素等于x,返回其序号i+1
return 0; // 退出循环,查找失败
}
2.按位置查找:
template <class T>
T Seq<T>::Get (int i)
{
if (i<1 && i>length) throw "位置非法"; //i必在表长度内
else return data[i-1]; //第 i 个下标为 i-1
}