慕衍> 2022-03-30 13:44 采纳率: 87.5%
浏览 40
已结题

顺序表的有序表合并,看半天不知道哪里出错了,,


//main.c
#include<stdio.h>
#include"SqList.h"
int main()
{
    SqList a, b, c;
    InitList(&a);
    InitList(&b);
    printf("a;\n");
    CreateList(&a, 5);
    printf("b:\n");
    CreateList(&b, 5);
    MerList(&a, &b, &c);
    PutsList(&a);
    return 0;
}


//SqList.c
#include<stdio.h>
#include"SqList.h"
int main()
{
    SqList a, b, c;
    InitList(&a);
    InitList(&b);
    printf("a;\n");
    CreateList(&a, 5);
    printf("b:\n");
    CreateList(&b, 5);
    MerList(&a, &b, &c);  //引发了异常: 读取访问权限冲突。
L1->**data** 是 0x1110117PutsList(&a);
    return 0;
}#include<stdio.h>
#include"SqList.h"
int main()
{
    SqList a, b, c;
    InitList(&a);
    InitList(&b);
    printf("a;\n");
    CreateList(&a, 5);
    printf("b:\n");
    CreateList(&b, 5);
    MerList(&a, &b, &c);
    PutsList(&a);
    return 0;
}



//SqList.h
#ifndef _SQLIST_H_
#define _SQLIST_H_
#define MAXSIZE 10
typedef struct {
    int *data;
    int length;
}SqList;
void InitList(SqList* L);
void CreateList(SqList* L, int n);
void MerList(SqList* L1, SqList* L2,SqList* L3);
void PutsList(SqList* L);
#endif
  • 写回答

3条回答 默认 最新

  • 关注

    你代码贴错了吧。
    猜测你的代码错误是因为没有初始化c(也就是没有调用InitList(&c)),导致在合并的时候长度++的时候出错。
    而且,main函数最后输出的应该是c,不应该是a。

    按照你的定义和函数写了一下,运行结果:

    img


    代码:

    SqList.h:

    #include <stdio.h>
    #define MAXNMB 100
    typedef struct
    {
        int data[MAXNMB];
        int len;
    }SqList;
    
    
    void InitList(SqList* L);
    
    void CreateList(SqList* L, int n);
    
    void MerList(SqList* L1, SqList* L2, SqList* L3);
    
    void PutsList(SqList* L);
    
    
    

    SqList.c

    #include "SqList.h"
    #include <stdio.h>
    
    void InitList(SqList *L)
    {
        L->len = 0;
    }
    
    void CreateList(SqList* L, int n)
    {
        int i = 0;
        printf("请输入%d个递增序列:",n);
        for (i = 0; i < n; i++)
        {
            scanf("%d", &L->data[i]);
        }
        L->len = n;
    }
    
    void MerList(SqList* L1, SqList* L2, SqList* L3)
    {
        int i = 0, j = 0, k = 0;
        while (i < L1->len && j < L2->len)
        {
            if (L1->data[i] < L2->data[j])
                L3->data[k++] = L1->data[i++];
            else
                L3->data[k++] = L2->data[j++];
        }
        while(i<L1->len)
            L3->data[k++] = L1->data[i++];
        while(j<L2->len)
            L3->data[k++] = L2->data[j++];
        L3->len = k;
    }
    
    void PutsList(SqList* L)
    {
        int i = 0;
        for (i = 0; i < L->len; i++)
        {
            if (i == 0)
                printf("%d", L->data[i]);
            else
                printf(" %d", L->data[i]);
        }
        printf("\n");
    }
    
    
    

    main.c

    
    #include "SqList.h"
    #include <stdio.h>
    int main()
    {
        SqList a, b, c;
        InitList(&a);
        InitList(&b);
        InitList(&c); //这里添加对c的初始化,或者放在合并函数的开头也可以
        printf("a;\n");
        CreateList(&a, 5);
        printf("b:\n");
        CreateList(&b, 5);
        MerList(&a, &b, &c); 
        PutsList(&c);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd