用L3来储存L1和L2的并集,L3在返回的时候data值在打印时会显示地址访问异常。在我讲合并出的L3结果中的data值进行打印时出现的是并不是我之前输入的值。
#include<stdio.h>
#define MAXSIZE 100
typedef struct Node
{
int data;
int cur;
}Node;
//静态链表初始化
Node Initnode(Node L[MAXSIZE])
{
int i = 0;
for (i = 1; i < MAXSIZE; i++)
{
L[i].cur = i + 1;
}
L[MAXSIZE - 1].cur = 0;
L[0].cur = -1;
return L[MAXSIZE];
}
//在静态链表中直接插入元素
Node Setnode(Node L[MAXSIZE], int num)
{
int a = 0;
int i = 0;
printf("请依次输入链表中的元素:\n");
for (i = 1; i < num + 1; i++)
{
a = L[i].cur;
scanf("%d", &L[a].data);
}
L[num + 1].cur = 0;
L[0].cur = num + 2;
return L[MAXSIZE];
}
//遍历静态链表
void Printnode(Node L[MAXSIZE])
{
int i = 1;
while (L[i].cur)
{
i = L[i].cur;
printf("%d", L[i].data);
}
printf("\n");
}
//两个静态链表求并集
Node Unionnode(Node L1[MAXSIZE], Node L2[MAXSIZE], int num1, int num2)
{
int i = 0;
int j = 0;
int jug = 0;
int k = 0;
Node L3[MAXSIZE];
L3[MAXSIZE] = Initnode(L3);
for (i = 2; i < num2 + 2;i++)
{
L3[i].cur = L2[i].cur;
L3[i].data = L2[i].data;
}
L3[0].cur = num2 + 2;
k = L3[0].cur;
for (i = 2; i < num1 + 2; i++)
{
jug = 0;
for (j = 2; j < num2 + 2; j++)
{
if (L1[i].data == L2[i].data)
{
break;
}
jug++;
}
if (jug == num2)
{
L3[k].data = L1[i].data;
k = L3[k].cur;
}
if (i == num2 + 1)
{
L3[k].cur = 0;
}
}
L3[num2 + 1].cur = num2 + 2;
return L3[MAXSIZE];
}
int main()
{
int i = 0;
Node L1[MAXSIZE], L2[MAXSIZE], L3[MAXSIZE];
int num1 = 0;
int num2 = 0;
L1[MAXSIZE] = Initnode(L1);
L2[MAXSIZE] = Initnode(L2);
printf("请输入创建链表1的元素个数:\n");
scanf("%d", &num1);
L1[MAXSIZE] = Setnode(L1, num1);
printf("请输入创建链表2的元素个数:\n");
scanf("%d", &num2);
L2[MAXSIZE] = Setnode(L2, num2);
L3[MAXSIZE] = Unionnode(L1, L2, num1, num2);
Printnode(L3);
}