//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
顺序表的有序表合并,看半天不知道哪里出错了,,
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 技术专家团-小桥流水 2022-03-30 14:38关注
你代码贴错了吧。
猜测你的代码错误是因为没有初始化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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 iOS绕地区网络检测
- ¥15 python验证码滑块图像识别
- ¥15 根据背景及设计要求撰写设计报告
- ¥15 QT6颜色选择对话框显示不完整
- ¥20 能提供一下思路或者代码吗
- ¥15 用twincat控制!
- ¥15 请问一下这个运行结果是怎么来的
- ¥15 单通道放大电路的工作原理
- ¥30 YOLO检测微调结果p为1
- ¥15 DS18B20内部ADC模数转换器