/*2.删除顺序表中第i个元素结点。
实验测试数据基本要求:
第一组数据:顺序表长度n≥10,i分别为5,n,1,n+1,0
第二组数据:顺序表长度n=0, i=5
*/
#include
#include
using namespace std;
#define max 100
typedef int element;
typedef struct sList {
element data[max];
int listLen;
}seqList;
void initialList(seqList* L) {
L->listLen = 0;
}
void listDelete(seqList* L, int i) {
int j;
if (i<1 || i>L->listLen)
{
cout << "删除位置错误!" << endl;
}
else {
for (j = i; j < L->listLen; j++)
L->data[j - 1] = L->data[j];
L->listLen--;
}
}
bool listAdd(seqList* L) {
if (L->listLen == max)
return false;
else {
element x = 1;
cout << "请输入一组数据:(9999退出)";
while (x != 9999) {
cin >> x;
L->data[L->listLen++] = x;
}
return true;
}
}
void listPrint(seqList* L) {
for (int i = 0; i < L->listLen; i++) {
cout << L->data[i] << " ";
}
}
int main() {
seqList* L=new seqList;
initialList(L);
int n,i;
cout << "请输入顺序表长度:";
cin >> n;
L->listLen = n;
if (L->listLen == 0) {
cout << "该表为空表" << endl;
return false;
}
listAdd(L);
cout << "输入要删除的元素序号:";
cin >> i;
listDelete(L,i);
listPrint(L);
}
这些代码我第一次运行的时候是可以的非常顺利,但是之后写了别的程序有来运行的时候,就输出了这些东西:
想要咨询一下这是为什么,不光在VS上是这样,我在devc++上也运行了,还是不行
一开始就执行了
L->listLen = n
后面又执行L->listLen++
你这长度明显不对劲呀
出了什么东西?贴出错误信息,是不是把两个程序放在一个项目里导致冲突了。
参考GPT和自己的思路:
根据你提供的信息,很难判断出问题的具体原因。但是可以根据代码逻辑和运行过程提出一些可能导致问题的原因和建议:
内存泄漏问题:在main函数中,使用了new创建一个seqList结构体指针L,但是没有在程序结束时使用delete释放内存。建议在main函数结束前加上delete L;。
后续操作问题:你提到写了别的程序来运行代码,但是没有提供具体的代码和操作。如果在运行过程中,如shell突然关闭或者操作系统崩溃等情况下,可能会导致程序异常退出。建议检查操作过程和环境。
数据输入问题:在listAdd函数中,输入数据的过程中,没有检查数组下标的范围,如果数据个数超过了数组的大小,可能会导致数组越界异常。建议加上数组下标范围的判断。
输出问题:你给出的错误信息比较简略,无法判断是否是程序运行的报错信息,还是输出结果不符合预期。建议重新运行程序,并记录输出结果和错误信息,进行分析。
总之,在调试程序时,需要仔细检查代码逻辑,边界检查,输入输出等过程,以找出问题出现的原因,并进行针对性的优化和测试。
不知道你这个问题是否已经解决, 如果还没有解决的话: