顺序表的实现
const int MaxSize=100 //根据实际问题具体定义
template<typename DataType> //定义模板类SeqList
class SeqList
{
public:
SeqList(); //建立空的顺序表
SeqList(DataType a[],int n); //建立长度为n的顺序表
~SeqList(); //析构函数
int Length(); //求线性表的长度
DataType Get(int i); //按位查找,查找第i位的元素的值
int Locate(DataType x); //按值查找,查找值为x的元素的序号
void Insert(int i,DataType x); //插入操作,在第i位插入值为x的元素
DataType Delete(int i); //删除操作,删除第i位的元素
int Empty(); //判断线性表是否为空
private:
DataType data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
1.无参构造函数——初始化顺序表
只需将顺序表的长度length初始化为0。
2.有参构造函数——建立顺序表
template<typename DataType>
SeqList<DataType>::SeqList(DataType a[],int n)
{
if(n>MaxSize)
throw "非法参数";
for(int i=0;i<n;i++)
data[i]=i;
length=n;
}
3.析构函数——销毁顺序表
顺序表自动释放空间,所以无需析构,析构为空。
4.判空操作
只需要判断Length是否为0即可。
5.求顺序表的长度
只需要看length的值就可
6.遍历操作
template<typename DataType>
void SeqList<DataType>::PrintList()
{
for(int i=0;i<length;i++)
cout<<data[i]<<"\t"; //依次输出线性表的元素值
cout<<endl;
}
7.按位查找
template<typename DataType>
DataType SeqList<DataType>::Get(int i)
{
if(i<1 || i>length)
throw "查找非法位置";
else
return data[i-1];
}
8.按值查找
template<typename DataType>
int SeqList<DataType>::Locate(DataType x)
{
for(int i=0;i<length;i++)
if(data[i]==x)
return i+1;
else
return 0;
}
9.插入操作
template<typename DataType>
void SeqList<DataType>::Insert(int i,DataType x)
{
if(i<1 || i>length+1)
throw "插入位置错误";
if(length == MaxSize)
throw "上溢";
for(int j = length;j>=i;j--) //将最后一个元素直至第i个元素分别向后移一个位置
data[j] = data[j-1];
data[i-1] = x;
length++;
}
10.删除操作
template<typename DataType>
DataType SeqList<DataType>::Delete(int i)
{
DataType x;
if(length==0)
thorow "下溢";
if(i<1 || i>length)
throw "删除位置错误";
x=data{
i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}