#include <iostream>
using namespace std;
const int MaxSize=50;
template <class T> //模板类
class SeqList
{ public:
SeqList() {length=0;}
SeqList(T a[],int n);
~SeqList(){}
int Length() {return length;}
T Get(int i);
int Locate(T x);
void Insert (int i, T x);
T Delete(int i);
void PrintList();
private:
T data[MaxSize]; int length; };
template<class 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; }
template <class 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++; }
template <class T> T SeqList<T>::Get(int i)
{ if(i<1||i>length) throw "查找位置非法";
else return data[i-1];
}
template <class T> int SeqList<T>::Locate(T x)
{ for (int i=0;i<length;i++)
if (data[i]==x)return i+1;
return 0; }
template <class T> T SeqList<T>::Delete(int i)
{ if (int 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; }
template<class T> void SeqList<T>::PrintList()
{ for (int i=0;i<length;i++)
cout<<data[i]<<" ";
cout<<endl; }
void menu()
{ cout<<" 欢迎,欢迎!"<<endl;
cout<<" 1.插入查询"<<endl;
cout<<" 2.删除函数"<<endl;
cout<<" 3.求顺序表长"<<endl;
cout<<" 4.按值查找"<<endl;
cout<<" 5.按位查找"<<endl;
cout<<" 6.遍历线性表"<<endl;
cout<<" 7.退出"<<endl;
cout<<" 选择上述操作:"<<endl; }
int main()
{int n,k;
cout<<"请输入需要的数据量,n="<<endl;
cin>>n;
int a[n];
cout<<endl<<"请依次输入n个数据"<<endl;
for(k=0;k<n;k++)
cin>>a[k];
int i,j,x;
SeqList<int> s1(a,n);
int flag=1;
while(flag)
{ menu();
cin>>j;
switch(j)
{ case 1: { cout<<"显示要插入的位序及数值:"<<endl; cin>>i>>x; cout<<endl; s1.Insert(i,x); s1.PrintList(); }; break;
case 2: { cout<<"输入元素所在位置"; cin>>i; x=s1.Delete(i); cout<<"已删除:"<<x<<endl; cout<<"删除数据后表变为:"<<endl; s1.PrintList(); }break;
case 3: { s1.Length(); cout<<"线性表长度为:"<<s1.Length()<<endl;}; break;
case 4: { cout<<"输入查找数据 x:"<<endl; cin>>x; s1.Locate(x); cout<<"所查数据在第"<<s1.Locate(x)<<"位"<<endl; } break;
case 5: { cout<<"查找位置 i="; cin>>i; s1.Get(i); cout<<"该位置元素为:"<<s1.Get(i)<<endl; }; break;
case 6: { s1.PrintList(); } catch(char *s){cout<<s<<endl;} }; break;
case 7: flag=0; break;
default:cout<<"错误!!!"<<endl; break;
} }
return 0; }
using namespace std;
const int MaxSize=50;
template <class T> //模板类
class SeqList
{ public:
SeqList() {length=0;}
SeqList(T a[],int n);
~SeqList(){}
int Length() {return length;}
T Get(int i);
int Locate(T x);
void Insert (int i, T x);
T Delete(int i);
void PrintList();
private:
T data[MaxSize]; int length; };
template<class 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; }
template <class 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++; }
template <class T> T SeqList<T>::Get(int i)
{ if(i<1||i>length) throw "查找位置非法";
else return data[i-1];
}
template <class T> int SeqList<T>::Locate(T x)
{ for (int i=0;i<length;i++)
if (data[i]==x)return i+1;
return 0; }
template <class T> T SeqList<T>::Delete(int i)
{ if (int 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; }
template<class T> void SeqList<T>::PrintList()
{ for (int i=0;i<length;i++)
cout<<data[i]<<" ";
cout<<endl; }
void menu()
{ cout<<" 欢迎,欢迎!"<<endl;
cout<<" 1.插入查询"<<endl;
cout<<" 2.删除函数"<<endl;
cout<<" 3.求顺序表长"<<endl;
cout<<" 4.按值查找"<<endl;
cout<<" 5.按位查找"<<endl;
cout<<" 6.遍历线性表"<<endl;
cout<<" 7.退出"<<endl;
cout<<" 选择上述操作:"<<endl; }
int main()
{int n,k;
cout<<"请输入需要的数据量,n="<<endl;
cin>>n;
int a[n];
cout<<endl<<"请依次输入n个数据"<<endl;
for(k=0;k<n;k++)
cin>>a[k];
int i,j,x;
SeqList<int> s1(a,n);
int flag=1;
while(flag)
{ menu();
cin>>j;
switch(j)
{ case 1: { cout<<"显示要插入的位序及数值:"<<endl; cin>>i>>x; cout<<endl; s1.Insert(i,x); s1.PrintList(); }; break;
case 2: { cout<<"输入元素所在位置"; cin>>i; x=s1.Delete(i); cout<<"已删除:"<<x<<endl; cout<<"删除数据后表变为:"<<endl; s1.PrintList(); }break;
case 3: { s1.Length(); cout<<"线性表长度为:"<<s1.Length()<<endl;}; break;
case 4: { cout<<"输入查找数据 x:"<<endl; cin>>x; s1.Locate(x); cout<<"所查数据在第"<<s1.Locate(x)<<"位"<<endl; } break;
case 5: { cout<<"查找位置 i="; cin>>i; s1.Get(i); cout<<"该位置元素为:"<<s1.Get(i)<<endl; }; break;
case 6: { s1.PrintList(); } catch(char *s){cout<<s<<endl;} }; break;
case 7: flag=0; break;
default:cout<<"错误!!!"<<endl; break;
} }
return 0; }