问题遇到的现象和发生背景
两线性表合并不了,感觉是ListInsert函数错了,却看不出哪里错
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef int Status;
#define MaxSize 100//初始最大分配量
#define Size 50
#define OVERFLOW -2
#define OK 1
#define ERROR -1
typedef struct {
ElemType* elem;//基地址
int length;//当前长度
int listsize;//当前分配容量
}Sqlist;
/*初始化*/
Status InitList_Sq(Sqlist* L) {
L->elem = (ElemType*)malloc(MaxSize * sizeof(ElemType));
if (!L->elem) {
exit(OVERFLOW);
printf("分配空间失败\n");
}//存储分配失败
L->length = 0;//空表长度
L->listsize = MaxSize;//初始容量
return OK;
}
void CreateList(Sqlist* L, int n) {
for (int i = 0; i < n; i++) {
printf("输入元素:");
int e;
scanf_s("%d", &e);
L->elem[i] = e;
L->length++;
}
}
Status ListLength(Sqlist* L) {
return L->length;
}
/*按序号查某个元素的值*/
Status GetElem(Sqlist L, int i, ElemType *e) {
if (i < 1 || i > L.length)
return ERROR;
*e = L.elem[i - 1];
return OK;
}
/*查访La*/
Status LocateElem(Sqlist L, ElemType e) {
for (int i = 0; i < L.length; i++) {
if (L.elem[i] = e)
return i + 1;
}
return OK;
}
/*进行合并*/
void Union(Sqlist La, Sqlist Lb, int n, int m) {
ElemType e, a;
for (int i = 1; i <= n; i++) {
e = GetElem(Lb, i, &e);//取Lb表内元素的值
a = LocateElem(La, e);
if (a != 1) {
ListInsert(&La, m, &e);
}
}//遍历Lb表
}
/*插入元素*/
Status ListInsert(Sqlist* L, int i, ElemType e) {
if (i<1 || i>L->length + 1)
return ERROR;
ElemType* q = &(L->elem[i-1]);
ElemType* p;
for (p = &L->elem[L->length - 1]; p >= q; --p) {
*(p + 1) = *p;
}
*q = e;
++L->length;
return OK;
}
int PrintList(Sqlist* L) {
for (int i = 0; i < L->length; i++) {
printf("%d",L->elem[i]);
}
return OK;
}
int main() {
Sqlist La, Lb;
int n, m, e;
InitList_Sq(&La);//初始化La
InitList_Sq(&Lb);//初始化Lb;
printf("请问你要输入La的个数\n");
scanf_s("%d", &m);
CreateList(&La, m);//创建La
PrintList(&La);//输出La
printf("请问你要输入Lb的个数\n");
scanf_s("%d", &n);
CreateList(&Lb, n);//创建Lb
PrintList(&Lb);//输出Lb
printf("合并后的结果\n");
Union(La, Lb, n, m);
PrintList(&La);
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
希望各位帮忙