本关任务:实现 step7/answer.cpp 中的seqListInsert, seqListDel 2个操作函数,以实现线性表中数据的插入、删除功能。
相关知识
顺序表的定义如下:typedef struct
{
ElemType *elem;
int length;
} seqList;
对顺序表的操作,可以使用指针形式,也可以使用数组下标形式:
如定义了顺序表 seqList sl;
可以使用:*(sl.elem+1) = x;
给指针的指向赋值为x。 指针的加法是寻址,elem+i 即跳过i个数据单元。
或者
sl.elem[1] = x;
因为[]是运算符,等同于指针运算
编程要求
本关任务是完成顺序表的插入和删除操作,其他的顺序表初始化,创建,打印的操作,系统已经写好,不需要编写。
在头文件中有函数的功能和参数说明,按照要求完成。
注意:插入函数是要求在指定i后面插入
/**
* @brief 将e插入在位置i后并返回0。若空间已满,则返回OVERFLOW;如果参数i超过长度,则插入在表尾;其他情况返回ERROR
* @param L :要插入的顺序表L的引用
* @param i :插入位置,在表的第i个元素后插入。若为0:表示在最前面插入;
* @param e : 待插入的新元素
* @return :
* ERROR: 位置不合理
* OVERFLOW: 空间超过最大值
* OK:操作成功
*/
Status seqListInsert(seqList &L, int i, ElemType e);
/**
* @brief 将第i个位置的元素删除
* @param i :删除位置 1~len
* @param delEle :成功删除的元素
* @return :
* ERROR: 位置不合理
* OK:操作成功
*/
Status seqListDel(seqList &L, int i,ElemType &delEle);
测试说明
本关的测试文件是 step7/main.cpp ,负责对实现的代码进行测试。具体代码如下:int main()
{
seqList L;
ElemType e[10], t;
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> e[i];
seqListInitFromArray(L, e, n);
//删除: 输入3个删除位置,删除3个元素
for (int i = 0, j; i < 3; i++)
{
cin >> j;
Status st = seqListDel(L, j, t);
if (st == ERROR)
cout << "删除位置 " << j << " 不合理!\n";
else
cout << "成功删除元素: " << t << "!\n";
}
//插入:输入插入位置和要插入的元素
for (int i = 0, j; i < 3; i++)
{
// j: 插入位置
cin >> j;
ElemType x;
cin >> x;
Status st = seqListInsert(L, j, x);
if (st == ERROR)
cout << "插入位置 " << j << " 不合理!\n";
else
cout << "成功插入元素: " << x << endl;
}
seqListPrint(L);
return 0;
}
测试流程:
初始化顺序表
测试删除:删除3个位置
测试插入:在3个位置插入数据
输出
输入样例
5
1 2 3 4 5
1 1 1
0 99
0 88
100 666
输出样例
成功删除元素: 1!
成功删除元素: 2!
成功删除元素: 3!
成功插入元素: 99
成功插入元素: 88
成功插入元素: 666
88 99 4 5 666
我的代码:
测试结果: