问题:合并前的两个顺序表可以正常输入也可以通过循环遍历输出,但合并后的新的顺序表采用遍历循环输出没有结果。
我检查了一下我觉得MergeList那个函数应该没出错,但是不知道为什么最后的输出C顺序表是空的
代码:
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
#define InitSize 5
typedef struct seqlist{
int* data;
int length;
int Capacity;
}SqList;
void CreatList(SqList*L){
L->data = (int*)malloc(sizeof(int)*InitSize);
L->length = 0;
L->Capacity = InitSize;
} //初始化顺序表
//合并有序表
bool MergeList(SqList A,SqList B,SqList*C){
if(A.length+B.length>C->Capacity){
return false;
}
int i=0,j=0,k=0;
while(i<A.length&&j<B.length){
if(A.data[i]<=B.data[j]){
C->data[k++] = A.data[i++];
}
else{
C->data[k++] = B.data[j++];
}
} //将A,B中较小的排进C中
while(i<A.length){
C->data[k++] = A.data[i++];
}
while(j<B.length){
C->data[k++] =B.data[j++];
} //A,B 中剩下的排进C中
C->length = k; //此时C的长度应该是A和B的总长,也等于此时k的值
return true;
}
int main(){
SqList A,B,C;
int i;
CreatList(&A);
CreatList(&B);
CreatList(&C); //创建三个顺序表
printf("请输入需要融合的两个顺序表\n");
for(i=0;i<A.Capacity;i++){
scanf("%d",&A.data[i]);
A.length++;
}
for(i=0;i<B.Capacity;i++){
scanf("%d",&B.data[i]);
B.length++;
} //给A和B顺序表赋值
MergeList(A,B,&C);
for(i=0;i<C.length;i++){
printf("%d",C.data[i]);
}
return 0;
}