//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** 是 0x1110117。
PutsList(&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。
按照你的定义和函数写了一下,运行结果:
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链表?