瞬身李子啊 2022-09-23 15:06 采纳率: 77.8%
浏览 102
已结题

静态链表求并集,在新数组的打印阶段出现访问异常

用L3来储存L1和L2的并集,L3在返回的时候data值在打印时会显示地址访问异常。在我讲合并出的L3结果中的data值进行打印时出现的是并不是我之前输入的值。

img

#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);


}

  • 写回答

2条回答 默认 最新

  • 於黾 2022-09-23 15:22
    关注

    所有形参位置的Node L[MAXSIZE],都应该改为Node L[]
    所有return位置的return L[MAXSIZE];都应该改为return L

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。