Bootstrap

数据结构的线性表-顺序表插入、删除、查找实现功能

顺序表输入、遍历、插入、删除

编制C/C++程序,利用顺序存储方式实现下列功能:从键盘输入数据建立一个线性表(整数),并输出该线性表;然后根据屏幕提示,进行数据的插入或删除等操作,并在插入或删除数据后输出线性表。如图所示:

 【程序代码】

    #include <iostream>
    using namespace std;
    const int MaxSize=100;
    template <typename DataType> 
    //定义模板类
    class SeqList
    {
    public:
        SeqList(); //定义空表
        SeqList(DataType a[],int n);//建立长度为n的顺序表
        // ~SeqList();//析构函数
        int Length(); //求线性表的长度
        // int Get(int i );//按位查找 查找第i个元素的值
        // int Locate(int x);//按值查找查找值为X的元素
        void Insert(int i ,DataType x);//插入操作 在第i个元素的值
        int Delete(int i ); //删除操作 删除第i个元素
        // int Empty();//判断线性表是否为空
        void PrintList();//遍历操作 按序号依次输出各元素   
    private:
        DataType data [MaxSize];
        int length;  
    };
    // 初始化
    template<typename DataType>SeqList<DataType>::SeqList() { 
    length=0;
}
    //建立顺序表
    template<typename DataType>
    SeqList<DataType>::SeqList(DataType a[],int n)
  {
        if(n>MaxSize)throw"参数非法";
        for(int i=0;i<n;i++)
        data[i]=a[i];
        length=n;
  }
   //遍历操作
    template<typename DataType>
    void SeqList <DataType>::PrintList(){

        for(int i =0;i<length;i++)
        cout<<data[i]<<" ";
        cout<<endl;
    }
    // //按位查找
    // template<typename DataType>
    // int SeqList<DataType>::Get(int i)
    // {
    //     if (i<1||i>length) throw"查找位置非法";
    //     else return data[i-1];
    // }
    // //按值查找
    // template<typename DataType>
    // int SeqList<DataType>::Locate(int x)
    // {
    //     for(int i=0;i<length;i++) 
    //     if(data[i]==x)return i+1;
    //     return 0;
    // }
    //插入操作
    template<typename DataType>
    void SeqList<DataType>::Insert(int i ,DataType 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<typename DataType>
    int SeqList<DataType>::Delete(int i)
    {
        int x;
        if(length==0) throw "下溢";
        if(i<1||i>length)throw"删除位置有误!";
        x=data[i-1];
        for(int j=i;j<length;j++)
        data[j-1]=data[j];
        length--;
        return x;
    }
   //主函数
    int main(){
      int r[MaxSize],a,x,b; //r[]为数组 a为输入的个数 X插入的元素 b插入的位置

      cout<<"请输入线性表的整数个数n:"<<endl;
      cin>>a;
       cout<<"顺序表初始化完成"<<endl;
      cout<<"请输入线性表的各个元素:"<<endl;
        for(int i=0;i<a;i++)
            cin>>r[i];
    //建立顺序表
      SeqList<int >L(r,a); 
      cout<<"原线性表如下:"<<endl;;
    //调用遍历函数操作
      L.PrintList();

     try{
      cout<<"请输入要插入的元素及其插的位置:"<<endl;
      cin>>x>>b;
      L.Insert(b,x);
      cout<<"插入之后的数组:";
      L.PrintList();
      } catch( char const *str){cout<<str<<endl; }
    //   cout<<"当前线性表的长度为:"<<L.Length()<<endl;
    //   cout<<"请输入查找的元素值:";
    //   cin>>x;
    //   i=L.Locate(x);
    //   if(0==i) cout<<"查找失败"<<endl;
    //   else cout<<"元素"<<x<<"的位置为:"<<i<endl;
    //   try
    //   {
    //       cout<<"请输入查找第几个元素值:";
    //       cin>>i;
    //       cout<<"第"<<i<<"个元素值是"<<L.Get(i)<<endl; 
    //   }
    //   catch(char *str){cout<<str<<endl;}
    //   try{
    //     cout<<"请输入查找第几个元素值:  ";
    //     cin>>i;
    //     cout<<"第"<<i<<"元素值是"<<L.Get(i)<<endl;
    //   }catch(char *str){cout<<str<<endl;}
       
      try{
        cout<<"请输入要删除的元素的位置:";
        cin>>x;
        L.Delete(x);
        cout<<"删除之后的数组:"<<endl;
        L.PrintList();
       }catch(char const *str){cout<<str<<endl;}

      cout<<"名字"<<endl;
      system("pause");
      return 0;
    }

;