顺序存储线性表

#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;
}

 

posted @ 2021-01-21 09:04  大耿2844  阅读(32)  评论(0)    收藏  举报