#include<iostream>
using namespace std;
const int Max_size = 100; //顺序表的最大长度
template<typename T>
class SeqList{
public:
SeqList():length_(0),data(nullptr){}
SeqList(T*input_array,int length);
~SeqList(){};
int Length();
void Insert_data(int i,T x);// 在第i个位置添加x
/*
T Get ( int i ); // 按位查找,取线性表的第 i 个元素
int Locate ( T x ) ; // 按值查找,求线性表中值为 x 的元素序号
T Delete ( int i ) ; // 删除线性表的第 i 个元素
void PrintList ( ) ; // 遍历线性表,按序号依次输出各元素
*/
T Get(int i);
int Locate(T x);
T Delete(int i);
void PrintList();
private:
int length_;
// auto data = new T[Max_size];
T data[Max_size];
};
template<class T>
SeqList<T>::SeqList(T*input_array,int length){
if(length<=0) throw"length error!";
length_ = length;
memcpy(data,input_array,length*sizeof(T));
}
template<class T>
void SeqList<T>::Insert_data(int i,T x){
if(length_>=Max_size)throw"length is max_size!";
if(i<1||i>length_)throw"index error!";
for(int j = length_-1;j>=i-1;j--){
data[j+1] = data[j];
}
data[i-1] = x;
length_++;
}
template<class T>
int SeqList<T>::Length(){
return length_;
}
template<typename T>
T SeqList<T>::Get(int i){
return data[i-1];
}
template<typename T>
T SeqList<T>::Delete(int i){
if(i<0||i>length_)throw"index error!";
T temp = data[i-1];
for(int j =i-1;j<=length_-2;j++){
data[j] = data[j+1];
}
// delete data[length_-1];
length_--;
return temp;
}
template<typename T>
int SeqList<T>::Locate( T x){
for(int i=0;i<length_;i++){
if(data[i]==x){
return i+1;
}
}
throw"not find!";
}
template<typename T>
void SeqList<T>::PrintList(){
for(int i = 0;i<length_;i++){
std::cout<<data[i]<<"\t";
}
std::cout<<endl;
}
int main(){
int a[8] ={1,2,6,9,8,11,2,5};
SeqList<int> seqlist(a,8);
seqlist.PrintList();
cout<<"length:"<<seqlist.Length()<<endl;
cout<<"删除了第一个数字:"<<seqlist.Delete(1)<<endl;
seqlist.PrintList();
cout<<"length:"<<seqlist.Length()<<endl;
cout<<"在第3个位置插入5"<<endl;
seqlist.Insert_data(3,5);
seqlist.PrintList();
cout<<"length:"<<seqlist.Length()<<endl;
cout<<"得到第6个数字:"<<seqlist.Get(6)<<endl;
}