用VS练习顺序表遇到的问题。从运行结果来看,初始化,插入和打印都没问题,但只想删除一个元素,结果却删除了两个。不太明白哪错了。源代码如下:
你自己代码里调用了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;
}
现在,运行程序后,将会正确地删除一个元素。
【相关推荐】