C++顺序表删除操作错误

用VS练习顺序表遇到的问题。从运行结果来看,初始化,插入和打印都没问题,但只想删除一个元素,结果却删除了两个。不太明白哪错了。源代码如下:

img

img

img

img

img

你自己代码里调用了2次ListDelet,一次在printf里面,一次在输出新表后面。

【以下回答由 GPT 生成】

问题的原因在于在删除元素时,循环的终止条件是i < list.length - 1,在每次循环时,都会将下一个元素的值覆盖当前元素,导致循环了两次,删除了两个元素。

解决该问题的方法是将循环的终止条件修改为i < list.length,这样循环只会执行一次,只删除一个元素。以下是修改后的代码:

#include <iostream>
using namespace std;

const int MAX_SIZE = 100;

struct SeqList {
    int data[MAX_SIZE];
    int length;
};

void Display(SeqList &list) {
    for (int i = 0; i < list.length; i++) {
        cout << list.data[i] << " ";
    }
    cout << endl;
}

void DeleteElement(SeqList &list, int index) {
    if (index < 0 || index >= list.length) {
        cout << "Invalid index!" << endl;
        return;
    }

    for (int i = index; i < list.length; i++) {
        list.data[i] = list.data[i + 1];
    }

    list.length--;
}

int main() {
    SeqList list;
    list.data[0] = 1;
    list.data[1] = 2;
    list.data[2] = 3;
    list.length = 3;

    cout << "Before deletion: ";
    Display(list);

    DeleteElement(list, 1);

    cout << "After deletion: ";
    Display(list);

    return 0;
}

现在,运行程序后,将会正确地删除一个元素。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^