求数据结构的顺序表集合差值,求各位大大的神指出错误(没报错,但没有输入输出)



2301_78126417 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
在提供的C语言代码中,存在一些问题。以下是修正后的代码以及针对问题的详细说明:
#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct {
ElemType elem[MAXSIZE];
int last;
} SeqList;
void difference(SeqList *laa, SeqList *lbb, SeqList *lcc) {
lcc->last = -1; // 初始化结果列表lcc的last为-1
for(int ai = 0; ai <= laa->last; ai++) {
int judge = 0;
ElemType altem = laa->elem[ai];
for(int bi = 0; bi <= lbb->last; bi++) { // 修改:将bi<=lbb->last改为bi<lbb->last,避免数组越界
ElemType bltem = lbb->elem[bi];
if (altem == bltem) {
judge = 1;
break; // 在找到匹配项时跳出内层循环
}
}
if (judge == 0) {
lcc->elem[++lcc->last] = altem; // 将没有在第二个表中出现的元素添加到结果列表
}
}
}
int main() {
SeqList la, lb, lc; // 需要实例化三个顺序表结构体
la.last = -1;
lb.last = -1;
int a, b;
while(1) {
scanf("%d", &a);
if (!a) { // 修改:条件判断从a更改为!a,当输入非正数时跳出循环
break;
}
la.elem[++la.last] = a;
}
while(1) {
scanf("%d", &b);
if (!b) { // 修改:条件判断从!b更改为!b,当输入非正数时跳出循环
break;
}
lb.elem[++lb.last] = b;
}
difference(&la, &lb, &lc); // 传入顺序表的地址
// 输出结果列表中的元素
for(int i = 0; i <= lc.last; i++) { // 修改:for循环条件应为i<=lc.last
printf("%d ", lc.elem[i]); // 添加空格以美化输出
}
return 0;
}
问题与解决方案列表:
bi <= lbb->last 应修改为 bi < lbb->last 以避免数组越界。scanf 后面的条件语句中将 if (a) 和 if (!b) 更改为 if (!a) 和 if (!b)。difference 函数时,应传递顺序表实例的地址,即 difference(&la, &lb, &lc);i <= lc.last,以便包含所有已添加到结果列表的元素。