写一个顺序表模板,包括顺序表的基本功能,例如查找,插

/*写一个顺序表模板,包括顺序表的基本功能,例如查找,插入,删除,输出,判断是否为空等等*/
#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;
}

原文地址:https://www.cnblogs.com/javaadu/p/11742828.html