编写顺序表模板类SeqList,实现课本上的关键成员函数代码,并注意拓展。 分别定义三个对象: SeqList <int, 100> a; SeqList <char, 100> b; SeqList <double, 100> c; 每次输入一个序列,根据要求打印结果。 序列前两个是字符(两个字符用空格隔开): 第一个字符表示对哪个对象操作,如a、b或c; 第二个字符表示什么操作,i表示insert,d表示delete,p表示printlist打印序列,l(小写的L)表示显示locate操作返回的位置。只有四个操作。 序列的后面就是参数(均用空格隔开),对于p操作没有参数。 对于a和c对象的insert,如1 100,表示第1个位置插入100。 对于b对象的insert,如1 x,表示第1个位置插入字符x。 对于delete操作,直接直接是数字,如1,表示删除第一个位置上的元素,后续元素前移。 对于locate操作,后面直接接元素值,返回从前往后首次查找到的元素的位置。找不到返回0. 对于printlist操作,打印结果,每个元素中间用1个空格隔开 注意,每个功能打印结果后都换行。
时间: 2023-05-18 14:05:26 浏览: 84
#include<iostream>
using namespace std;
template<class T,int MaxSize>
class SeqList{
private:
T data[MaxSize];
int length;
public:
SeqList(){
length=0;
}
void Insert(int i,T x){
if(length==MaxSize){
cout<<"Overflow"<<endl;
return;
}
if(i<0||i>length){
cout<<"Position Error"<<endl;
return;
}
for(int j=length-1;j>=i;j--){
data[j+1]=data[j];
}
data[i]=x;
length++;
}
void Delete(int i){
if(length==0){
cout<<"Underflow"<<endl;
return;
}
if(i<0||i>=length){
cout<<"Position Error"<<endl;
return;
}
for(int j=i;j<length-1;j++){
data[j]=data[j+1];
}
length--;
}
int Locate(T x){
for(int i=0;i<length;i++){
if(data[i]==x){
return i+1;
}
}
return 0;
}
void PrintList(){
for(int i=0;i<length;i++){
cout<<data[i]<<" ";
}
cout<<endl;
}
};
int main(){
SeqList<int,100> a;
SeqList<char,100> b;
SeqList<double,100> c;
char op,type;
int pos;
double x;
char ch;
while(cin>>type>>op){
if(op=='i'){
if(type=='a'){
cin>>pos>>x;
a.Insert(pos-1,x);
}
else if(type=='b'){
cin>>pos>>ch;
b.Insert(pos-1,ch);
}
else if(type=='c'){
cin>>pos>>x;
c.Insert(pos-1,x);
}
}
else if(op=='d'){
cin>>pos;
if(type=='a'){
a.Delete(pos-1);
}
else if(type=='b'){
b.Delete(pos-1);
}
else if(type=='c'){
c.Delete(pos-1);
}
}
else if(op=='l'){
if(type=='a'){
cin>>x;
cout<<a.Locate(x)<<endl;
}
else if(type=='b'){
cin>>ch;
cout<<b.Locate(ch)<<endl;
}
else if(type=='c'){
cin>>x;
cout<<c.Locate(x)<<endl;
}
}
else if(op=='p'){
if(type=='a'){
a.PrintList();
}
else if(type=='b'){
b.PrintList();
}
else if(type=='c'){
c.PrintList();
}
}
}
return 0;
}
阅读全文