纠错#include<iostream.h> #include<stdlib.h> typedef int T class SeqList { private: T data; int MaxSize; //顺序表最多可以存放的元素个数。 int last; //顺序表最后一个元素的下标,初始值为-1。 void SeqList(int sz); void Input();//首先输入元素的个数,然后顺次输入元素的值。 void Output();//输出线性表的所有元素。 void Insert(const T& x, int i );//在线性表中第i个位置插入值为x的元素。 int Remove ( T & x );//从线性表中删除第一个值等于x的元素。 } SeqList(int sz){data = new T[sz];MaxSize = sz; SeqList.last = -1; } int main() { SeqList myList(100); myList.Input(); myList.Output (); int i; for( i=0;i<5;i++) myList.Insert(i+10,i); myList.Output (); for( i=10;i<15;i++) myList.Remove(i); myList.Output (); return 0; }
时间: 2024-01-03 13:04:51 浏览: 97
纠错如下:
```cpp
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int T;
class SeqList {
private:
T *data; // 注意这里是指针类型
int MaxSize; // 顺序表最多可以存放的元素个数。
int last; // 顺序表最后一个元素的下标,初始值为-1。
public:
SeqList(int sz); // 构造函数声明
void Input(); // 首先输入元素的个数,然后顺次输入元素的值。
void Output(); // 输出线性表的所有元素。
void Insert(const T& x, int i); // 在线性表中第i个位置插入值为x的元素。
int Remove(T& x); // 从线性表中删除第一个值等于x的元素。
};
SeqList::SeqList(int sz) { // 构造函数定义
data = new T[sz]; // 动态分配数组空间
MaxSize = sz;
last = -1;
}
void SeqList::Input() {
int n;
cout << "请输入元素个数:";
cin >> n;
cout << "请输入元素值:";
for (int i = 0; i < n; i++) {
cin >> data[i];
last++; // 输入一个元素,last自增
}
}
void SeqList::Output() {
cout << "线性表元素为:";
for (int i = 0; i <= last; i++)
cout << data[i] << " ";
cout << endl;
}
void SeqList::Insert(const T& x, int i) {
if (last == MaxSize - 1) {
cout << "顺序表已满,无法插入元素!" << endl;
return;
}
if (i < 1 || i > last + 2) {
cout << "插入位置不合法!" << endl;
return;
}
for (int j = last; j >= i - 1; j--)
data[j + 1] = data[j];
data[i - 1] = x;
last++;
}
int SeqList::Remove(T& x) {
if (last == -1) {
cout << "顺序表为空,无法删除元素!" << endl;
return 0;
}
int i = 0;
while (i <= last && data[i] != x)
i++;
if (i > last) {
cout << "删除元素不存在!" << endl;
return 0;
}
for (int j = i; j < last; j++)
data[j] = data[j + 1];
last--;
return 1;
}
int main() {
SeqList myList(100);
myList.Input();
myList.Output();
int i;
for (i = 0; i < 5; i++)
myList.Insert(i + 10, i + 1);
myList.Output();
for (i = 10; i < 15; i++) {
int x = i;
myList.Remove(x);
if (x) // 如果删除成功
cout << "删除元素" << i << "成功!" << endl;
}
myList.Output();
return 0;
}
```
主要修改如下:
1. 在类定义中,将构造函数声明改为定义,并且为私有成员变量 `data` 动态分配内存空间。
2. 在类定义外部定义各个成员函数时,需要加上类名和作用域运算符 `::`。例如,构造函数的定义为 `SeqList::SeqList(int sz)`,输入函数的定义为 `void SeqList::Input()`,以此类推。
3. 修改了头文件 `#include<iostream.h>` 为 `#include<iostream>`,并添加了命名空间 `using namespace std;`。
4. 修改了类定义中的一些语法错误,例如,定义数组时应该用指针类型;在成员函数中,修改元素个数时应该修改 `last` 而不是 `SeqList.last`。
5. 在 `Insert` 函数中,修改了插入位置不合法的判断条件,并且在顺序表已满时作出提示。
6. 在 `Remove` 函数中,添加了删除元素不存在的判断条件,并且在顺序表为空时作出提示。并且在删除成功时返回 1,否则返回 0。同时,在 `main` 函数中进行了相应修改。
阅读全文