//顺序线性表
#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;
}