#include<iostream>
using namespace std;
// 建立顺序存储的线性表
const int maxsize =100;//定义maxsize=100
template<class T>
class olist{//olist=order list(顺序表)
public:
olist(const T temp[],T num1);
void get_elem(T i);//通过下标获得元素
T get_elem2(T i);//通过值获得有几个元素
void insert_elem(T i,T e);//插入元素
void delete_elem(T i);//删除元素
void show();
void get_length();
private:
T data[maxsize];//顺序线性表实际就是一个数组
T length;
};
template<class T>
olist<T>::olist(const T temp[],T num1){
length=num1;
for(int p=0;p<num1;p++){
data[p]=temp[p];
}
}
template<class T>
void olist<T>::get_elem(T i){//获得元素 输出表o中下标为i的数据元素的值
int e=0;
if(length==0){
cout<<"此顺序表为空表"<<endl;
return;
}
if(i<0 || i>=length){
cout<<"输入不合法"<<endl;
return;
}
e=data[i];
cout<<"第"<<i<<"个数据元素的值为"<<e<<endl;
}
template<class T>
T olist<T>::get_elem2(T i){//返回有几个元素与i相同的个数
for(int i1=0;i1<length+1;i1++){
if(data[i1]==i){
return i1+1;
}
}
return 0;
}
template<class T>
void olist<T>::insert_elem(T i,T e){//在表中下标为i的位置之前插入新的数据元素e
if(length>maxsize){
cout<<"表满了 无法插入"<<endl;
return;
}
if(i<0 || i>=length){
cout<<"输入不合法"<<endl;
return;
}
if(i<=length-1){//判断插入数据的位置是否在表尾
for(int i1=length-1;i1>=i;i1--){
data[i1+1]=data[i1];
}
}
data[i]=e;
length++;
}
template<class T>
void olist<T>::delete_elem(T i){//删除表o下标为i的数据元素
if(length==0){
cout<<"表为空"<<endl;
return;
}
if(i<0 || i>length-1){
cout<<"输入不合法"<<endl;
return;
}
if(i<length-1){//判断插入数据的位置是否在表尾
for(int i1=i;i1<length;i1++){
data[i1]=data[i1+1];
}
}
length--;
}
template<class T>
void olist<T>::show(){
for(int u=0;u<length;u++){
cout<<data[u]<<" ";
}
cout<<endl;
}
template<class T>
void olist<T>::get_length(){
cout<<"此顺序线性表的长度为"<<length<<endl;
}
int main(){
int arr[maxsize];
int num,k;
cout<<"输入创建顺序线性表的大小"<<endl;
cin>>num;
for(int j=0;j<num;j++){
cout<<"输入第"<<j+1<<"个元素的值"<<endl;
cin>>k;
arr[j]=k;
}
olist<int> l(arr,num);//创建一个顺序线性表的实例
//l.get_elem(2);
//l.insert_elem(2,100);
//l.delete_elem(2);
//l.show();
//l.get_length();
//int m=l.get_elem2(100);
return 0;
}