编写顺序表模板类SeqList,实现课本上的关键成员函数代码,并注意拓展。 分别定义三个对象: SeqList <int, 100> a; SeqList <char, 100>b; SeqList <double,100>c; 每次输入一个序列,根据要求打印结果。 序列前两个是字符(两个字符用空格隔开): 第一个字符表示对哪个对象操作,如a、b或c; 第二个字符表示什么操作,i表示insert,d表示delete,p表示printlist打印序列,1(小写的L)表示显示locate操作返回的位置。只有四个操作。 序列的后面就是参数(均用空格隔开),对于p操作没有参数。 对于a和c对象的insert,如1100,表示第1个位置插入100。 对于b对象的insert,如1x,表示第1个位置插入字符x。 对于delete操作,直接直接是数字,如1,表示删除第一个位置上的元素,后续元素前移。 对于locate操作,后面直接接元素值,返回从前往后首次查找到的元素的位置。找不到返回0. 对于printlist操作,打印结果,每个元素中间用1个空格隔开 注意,每个功能打印结果后都换行。
时间: 2023-03-27 18:02:04 浏览: 151
顺序表的基本操作,如查找,删除,插入,排序
我可以回答这个问题。以下是SeqList模板类的代码实现:
```
#include <iostream>
using namespace std;
template <typename T, int MAXSIZE>
class SeqList {
private:
T data[MAXSIZE];
int length;
public:
SeqList() {
length = ;
}
int Locate(T x) {
for (int i = ; i < length; i++) {
if (data[i] == x) {
return i + 1;
}
}
return ;
}
void Insert(int i, T x) {
if (length == MAXSIZE) {
cout << "List is full" << endl;
return;
}
if (i < 1 || i > length + 1) {
cout << "Invalid position" << endl;
return;
}
for (int j = length; j >= i; j--) {
data[j] = data[j - 1];
}
data[i - 1] = x;
length++;
}
void Delete(int i) {
if (i < 1 || i > length) {
cout << "Invalid position" << endl;
return;
}
for (int j = i; j < length; j++) {
data[j - 1] = data[j];
}
length--;
}
void PrintList() {
for (int i = ; i < length; i++) {
cout << data[i] << " ";
}
cout << endl;
}
};
int main() {
SeqList<int, 100> a;
SeqList<char, 100> b;
SeqList<double, 100> c;
char obj, op;
while (cin >> obj >> op) {
if (obj == 'a') {
int pos, num;
cin >> pos >> num;
if (op == 'i') {
a.Insert(pos, num);
} else if (op == 'd') {
a.Delete(pos);
} else if (op == 'p') {
a.PrintList();
} else if (op == '1') {
int loc = a.Locate(num);
cout << loc << endl;
}
} else if (obj == 'b') {
int pos;
char ch;
cin >> pos >> ch;
if (op == 'i') {
b.Insert(pos, ch);
} else if (op == 'd') {
b.Delete(pos);
} else if (op == 'p') {
b.PrintList();
} else if (op == '1') {
int loc = b.Locate(ch);
cout << loc << endl;
}
} else if (obj == 'c') {
int pos;
double num;
cin >> pos >> num;
if (op == 'i') {
c.Insert(pos, num);
} else if (op == 'd') {
c.Delete(pos);
} else if (op == 'p') {
c.PrintList();
} else if (op == '1') {
int loc = c.Locate(num);
cout << loc << endl;
}
}
}
return ;
}
```
对于输入的序列,我们可以使用以下代码进行处理:
```
char obj, op;
while (cin >> obj >> op) {
if (obj == 'a') {
int pos, num;
cin >> pos >> num;
if (op == 'i') {
a.Insert(pos, num);
} else if (op == 'd') {
a.Delete(pos);
} else if (op == 'p') {
a.PrintList();
} else if (op == '1') {
int loc = a.Locate(num);
cout << loc << endl;
}
} else if (obj == 'b') {
int pos;
char ch;
cin >> pos >> ch;
if (op == 'i') {
b.Insert(pos, ch);
} else if (op == 'd') {
b.Delete(pos);
} else if (op == 'p') {
b.PrintList();
} else if (op == '1') {
int loc = b.Locate(ch);
cout << loc << endl;
}
} else if (obj == 'c') {
int pos;
double num;
cin >> pos >> num;
if (op == 'i') {
c.Insert(pos, num);
} else if (op == 'd') {
c.Delete(pos);
} else if (op == 'p') {
c.PrintList();
} else if (op == '1') {
int loc = c.Locate(num);
cout << loc << endl;
}
}
}
```
其中,我们使用了三个SeqList对象a、b、c,根据输入的第一个字符来确定操作哪个对象。对于第二个字符,我们使用if语句来确定执行哪个操作。对于insert操作,我们需要输入位置和元素值;对于delete操作,我们只需要输入位置;对于locate操作,我们需要输入元素值;对于printlist操作,不需要输入任何参数。最后,我们使用cout语句来输出结果。
注意,每个功能打印结果后都需要换行。
阅读全文