//顺序线性表
#include <iostream>
using namespace std;
const int MaxSize=100;
template <typename T>
class SeqList
{
public:
SeqList(){length=0;}
//无参构造函数
SeqList(T a[],int n);
//有参构造函数
~SeqList(){}
//析构函数为空
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();
//遍历线性表,按序号依次输出各元素
private:
T data[MaxSize];
//存放数据元素的数组
int length;
//线性表的长度
};
//有参构造函数
template <typename 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;
}
//插入操作,在线性表中第i个位置插入元素x
template <typename T>
void SeqList<T>::Insert(int i,T x)
{
if(length>=MaxSize)
throw "上溢";
if(i<1||i>length+1)
throw "输入位置非法,超出顺序表范围";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
//删除操作,删除线性表中第i个元素
template <typename T>
T SeqList<T>::Delete(int i)
{
if(length==0)
throw "下溢";
//表空
if(i<1||i>length)
throw "超出范围";
T x=data[i-1];
for(int j=i;j<length;++j)
data[j-1]=data[j];
length--;
return x;
}
//按位查找,返回顺序表的第i个元素
template <typename T>
T SeqList<T>::Get(int i)
{
if(i<1||i>length)
throw "输入范围错误";
else
return data[i-1];
}
//按值查找,求线性表中值为x的元素序号
template <typename T>
int SeqList<T>::Locate(T x)
{
for(int j=0;j<length;++j)
{
if(data[j]==x)
return j+1;
}
return 0;
//说明查找失败
}
template <typename T>
//输出线性表
void SeqList<T>::PrintList()
{
cout<<"The SeqList is :"<<endl;
for(int i=0;i<length;++i)
cout<<data[i]<<' ';
cout<<endl;
}