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