程序没有输出
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
#define ERROR 0
typedef int Elemtype;
typedef struct
{
Elemtype *elem;
int last;
}SeqList;
void InitList(SeqList *L);
void print(SeqList *L);
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC);
void Create(SeqList *L);
int main()
{
SeqList *LA,*LB,*LC;
InitList(&LA);
InitList(&LC);
Create(LA);
InitList(&LB);
Create(LB);
mergeList(LA,LB,LC);
printf("合并前LA:");
print(LA);
printf("合并前LB:");
print(LB);
printf("合并后LC:");
print(LC);
return 0;
}
void InitList(SeqList *L)
{
L->last=0;
L->elem=(int*)malloc(MAXSIZE*sizeof(int));
if(!L->elem){
return ERROR;
}
return L;
}
void Create(SeqList *L)
{
int i=0,x,flag=1;
while(flag)
{
scanf("%d",&x);
if(x>0)
{
L->elem[i]=x;
i++;
}
else
{
L->elem[i]='0';
flag=0;
}
}
L->last=i;
}
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC)
{
int i=0,j=0,k=0;
while(i<LA->last&&j<LB->last)
{
if(LA->elem[i]<LB->elem[j])
{
printf("aaa");
LC->elem[k]=LA->elem[i];
i++;
k++;
}
else if(LA->elem[i]=LB->elem[j])
{
LC->elem[k]=LA->elem[i];
i++;
k++;
j++;
}
else
{
LC->elem[k]=LB->elem[j];
j++;
k++;
}
}
while(i<LA->last)
{
LC->elem[k]=LA->elem[i];
i++;
k++;
}
while(j<LB->last)
{
LC->elem[k]=LB->elem[j];
k++;
j++;
}
LC->last=k+1;
}
void print(SeqList *L)
{
int i;
printf("ok");
for(i=0;i<L->last;i++)
{
printf("%d ",L->elem[i]);
}
}
顺序表可以正常输入但是没有结果的输出
用print试了一下,应该问题是在create(LB)之后,但是把mergeList删掉后还是没有输出,包括printf都没有
改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
#define ERROR 0
typedef int Elemtype;
typedef struct
{
Elemtype* elem;
int last;
}SeqList;
void InitList(SeqList* L);
void print(SeqList* L);
void mergeList(SeqList* LA, SeqList* LB, SeqList* LC);
void Create(SeqList* L);
int main()
{
SeqList LA, LB, LC; //SeqList* LA, * LB, * LC; 修改
InitList(&LC);
InitList(&LA);
Create(&LA); //Create(LA); 修改
InitList(&LB);
Create(&LB); //Create(LB); 修改
printf("合并前LA:");
print(&LA); //print(LA); 修改
printf("合并前LB:");
print(&LB); //print(LB); 修改
mergeList(&LA, &LB, &LC); //mergeList(LA, LB, LC); 修改
printf("合并后LC:");
print(&LC); //print(LC); 修改
return 0;
}
void InitList(SeqList* L)
{
L->last = 0;
L->elem = (int*)malloc(MAXSIZE * sizeof(int));
if (!L->elem) {
return; //ERROR; 修改
}
//return L; 修改
}
void Create(SeqList* L)
{
int i = 0, x, flag = 1;
while (flag)
{
scanf("%d", &x);
if (x > 0)
{
L->elem[i] = x;
i++;
}
else
{
L->elem[i] = '0';
flag = 0;
}
}
L->last = i;
}
void mergeList(SeqList* LA, SeqList* LB, SeqList* LC)
{
int i = 0, j = 0, k = 0;
while (i < LA->last && j < LB->last)
{
if (LA->elem[i] < LB->elem[j])
{
printf("aaa\n");
LC->elem[k] = LA->elem[i];
i++;
k++;
}
else if (LA->elem[i] == LB->elem[j]) //else if (LA->elem[i] = LB->elem[j]) 修改
{
LC->elem[k] = LA->elem[i];
i++;
k++;
j++;
}
else
{
LC->elem[k] = LB->elem[j];
j++;
k++;
}
}
while (i < LA->last)
{
LC->elem[k] = LA->elem[i];
i++;
k++;
}
while (j < LB->last)
{
LC->elem[k] = LB->elem[j];
k++;
j++;
}
LC->last = k; //LC->last = k + 1; 修改
}
void print(SeqList* L)
{
int i;
printf("ok");
for (i = 0; i < L->last; i++)
{
printf("%d ", L->elem[i]);
}
printf("\n"); //修改
}
SeqList *LA,*LB,*LC 这3个指针没有分配内存。这里不需要指针,把星号删了