头歌.数据结构与算法.顺序表基本操作

本关任务:实现 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个位置插入数据
输出

输入样例

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 

我的代码:

3e01b7bbf3964f66a21b7fa8a299d4ae.jpg

f9e37517665e4b9497cecdb67bdeaaee.jpg 

 测试结果:

a9bf8a3c0abf4ef5b347f45f8cbd0e84.jpg

 

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值