瞬身李子啊 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日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境