数据结构与算法 p45-06
试设计一个算法,删除一个顺序表从第i个元素开始的k个元素
#include<iostream.h>//cout,cin
typedef int T;
//类的定义
template <class T>
class SqList //顺序表类
{
private:
T *elem; //表首址
int length; //表长
int listsize;//表容量
public:
SqList(int m) ;//构造函数, 创建容量为m的空表
~SqList();//析构函数,删除表空间
void CreateList(int n);//创建具有n个元素的线性表
void Delete(int i);//删除表中第i个元素
void ListDisp();//输出表元素
};
//类的实现
template<class T>
SqList<T>::SqList(int m)
{//构建函数,创建一表容量为m的空表
elem=new T[m];// 申请表空间
length=0;// 空表,表长为0
listsize=m;//表容量为m
}
template<class T>
SqList<T>::~SqList()//析构函数
{//释放表空间
delete [] elem;
length=0;
listsize=0;
}
template<class T>
void SqList<T>::CreateList(int n)
{//创建表长度为n的顺序表
if(n>listsize) throw"参数非法";
cout<<"请依次输入"<<n<<"个元素值:"<<endl;
for(int i=1;i<=n;i++)
cin>>elem[i-1];
length=n;
}
template <class T>
void SqList<T>::Delete (int i)
{// 删除表中第i个位置元素,如不能删除,显示异常信息。
if(length==0) throw "下溢";
if(i<1||i>length+1) throw "删除位置异常";
for(int t=i;t<length;t++)
elem[t-1]=elem[t];
length--;
}
template <class T>
void SqList<T>::ListDisp()
{//显示表内容
for(int i=0;i<length;i++)
{
cout<<elem[i]<<"\t";
}
cout<<endl;
}
//主函数
int main()
{
int k,i,la;
SqList<int> L(30);
cout<<"请输入要创建的顺序表中元素个数:";
cin>>la;
cout<<endl;
L.CreateList(la);
L.ListDisp();
cout<<endl;
cout<<"要求删除从第i个元素开始的k个元素"<<endl<<"分别输入i,k:";
cin>>i>>k;
while(k--)
{
L.Delete(i);
}
L.ListDisp();
cout<<endl;
return 0;
}