zoukankan      html  css  js  c++  java
  • 写一个顺序表模板,包括顺序表的基本功能,例如查找,插

    /*写一个顺序表模板,包括顺序表的基本功能,例如查找,插入,删除,输出,判断是否为空等等*/
    #include<iostream.h>
    #include<stdlib.h>
    template<class T,int size>
    class Orderdlist{
    private:
     int maxsize;
     int last;
     T slist[size];
    public:
     Orderdlist()//构造函数
     {
      last=-1;
      maxsize=size;
     }
     int Length()const//计算表的长度
     {
      return last+1;
     }
     int find(T x)//寻找x在表中的位置
     {
      int i;
      for(i=0;i<last;i++)
      {
       if(slist[i]==x)
        return i;
      }
      return 0;
     }
     bool panduan(T x)//判断x是否在表中
     {
      int i;
      for(i=0;i<last;i++)
      {
       if(slist[i]==x)
        return true;
      }
      return false;
     }
     bool insert(T x,int i)//x插入列表第i个位置处
     {
      int j;
      if(i<0 || i>last+1 || last==maxsize-1)
      {
       return false;
      }
      else
      {
       last++;
       for(j=last;j>i;j--)
        slist[j]=slist[j-1];
       slist[i]=x;
       return true;
      }
      
     }
     void print()
     {
      int i;
      if(IsEmpty())
      {
       cout<<"顺序表位空,无法输出"<<endl;
       exit(0);
      }
      else
      {
       for(i=0;i<last;i++)
       {
        cout<<slist[i]<<'/t';
        if((i+1)%5==0)
        {
         cout<<endl;
        }
       }
      }
      cout<<endl;
     }
     bool shanchu(T x)//删除x
     {
      int i=find(x),j;
      if(i>=0 && i<last)
      {
       for(j=i;j<last;j++)
        slist[j]=slist[j+1];
       last--;
       return true;
      }
      return false;
     
     }
     int houji(T x)//寻找x的后继位置
     {
      int i=find(x);
      if(i>=0 && i<last)
      {
       return i+1;
      }
      return -1;
     }

     int qianqu(T x)//寻找x的前驱位置
     {
      int i=find(x);
      if(i>0 && i<=last)
      {
       return i-1;
      }
      return -1;
     }
     bool IsEmpty()//判断表是否为空
     {
      if(last==-1)
      {
       return true;
      }
      else
      {
       return false;
      }
     }
     bool IsFull()//判断表是否为满
     {
      if(last==maxsize-1)
      {
       return true;
      }
      else
      {
       return false;
      }
     }
     T quzhi(int i)//取第i个元素的值
     {
      return slist[i];
     }
     T& operator[](int x)//重载符号“[]”
     {
      if(x<0 || x>last)
      {
       cout << "产生越界错误!" <<endl;
       exit(0);
      }
      else
      {
       return slist[x];
      }
     }
    };

    int main()
    {
     Orderdlist<int,100>Order;//顺序表对象Order的元素为整型
     int i,j,k,a[10]={2,3,5,7,11,13,17,23,29};
     for(j=0;j<10;j++)//检测插入素数函数
      if(!Order.insert(a[j],j))
      {
       cout<<"表太大了,放不下"<<endl;
       break;
      }
     j=Order.Length();
     Order.print();
     for(j=0;j<10;j++)
      Order[j]=0;
     Order.print();
     for(j=0;j<10;j++)
      Order[j]=a[j];
     k=7;
     if(Order.panduan(k))
     {
      cout<<"素数7在顺序表中"<<endl;
     }
     else
     {
      cout<<"素数7不在顺序表中"<<endl;
     }
     k=17;
     if(Order.shanchu(k))
     {
      cout<<"成功删除素数17"<<endl;
     }
     else
     {
      cout<<"找不到素数17,无法删除";
     }
     Order.print();
     j=Order.Length();
     if(Order.insert(k,j-2))
     {
      cout<<"成功将素数17放回"<<endl;
      Order.print();
     }
     cout<<"17的后一个数字是:"<<Order.quzhi(Order.houji(k))<<endl;
     cout<<endl;
     return 0;
    }

  • 相关阅读:
    学习笔记之正向代理和反向代理的区别
    PHP程序员的进阶之路
    go语言笔记——切片函数常见操作,增删改查和搜索、排序
    golang的垃圾回收(GC)机制
    堆栈的详细讲解
    springAop必导jar包
    sring框架的jdbc应用
    下载jar包方法
    mysql数据乱码
    Eclipse打包java工程
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742827.html
Copyright © 2011-2022 走看看