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


//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

你代码贴错了吧。
猜测你的代码错误是因为没有初始化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;
}

有什么错误提示信息啊
怎么搞了这么多main函数???
MerList(&a, &b, &c);
PutsList(&a);
既然是将a,b合并到c链表,为啥最后输出的是a链表?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632