#include <iostream>
using namespace std;
const int MaxSize = 100;//定义线性表的最大长度
template <typename T> //定义模板类SeqList
class SeqList
{
private:
int data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度typename
public:
SeqList(){ length = 0;} //无参构造函数
SeqList(int a[], int n); //有参构造函数
~SeqList(){} //析构函数为空
int Length() { return length;} //求线性表的长度
int Get(int i); //按位查找,取线性表的第i个元素
int Locate(int x); //按值查找,取线性表中值为x的元素序号
void Insert(int i, int x); //在线性表中第i个位置插入值为x元素
int Delete(int i); //删除线性表的第i个元素
void PrintList(); //遍历线性表,按序号依次输出个元素
};
template <typename T>
SeqList<T>::SeqList(int a[], int n)
{
if(n > MaxSize)
throw "参数非法";
for(int i = 0;i < n; i++)
{
data[i] = a[i];
}
length = n;
}
template <typename T>
int SeqList<T>::Get(int i)
{
if(i < 1 || i > length)
throw "查找位置非法";
else
return data[i-1];
}
template <typename T>
int SeqList<T>::Locate(int x)
{
for(int i = 0; i < length ; i++)
{
if(data[i] == x)
return i+1;
return 0;
}
}
template <typename T>
void SeqList<T>::Insert(int i, int x)
{
if(i > 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++;
}
template <typename T>
int SeqList<T>::Delete(int i)
{
if(length == 0)
throw "下溢";
if(i < 1 || i > length)
throw "位置异常";
int x =data[i-1];
for(int j = i; j < length; j++)
{
data[j-1] = data[j];
}
length--;
return x;
}
template <typename T>
void SeqList<T>::PrintList()
{
for(int i = 0; i < length; i++)
{
cout<<data[i]<<" ";
}
}
int main()
{
int L[]={21,23,16,46,65,17,31,9};
SeqList<int> SeqL(L,8);
cout<<"初始线性表的内容:"<<endl;
SeqL.PrintList();
cout<<endl;
SeqL.Insert(4,68);
cout<<"进行插入(4,68)后的线性表:"<<endl;
SeqL.PrintList();
cout<<endl;
SeqL.Delete(7);
cout<<"进行删除位置(7)后的线性表:"<<endl;
SeqL.PrintList();
return 0;
}