主题:那里出错了
题目:设计合并函数ListMerge(L1, L2, L3),功能是把有序顺序表L1和L2中的数据元素合并到L3中,要求L3中的数据元素依然保持有序。并设计一个主函数验证该合并函数的正确性。
这是我写的,但最后运行不出来。
#include <stdio.h>
#define Maxsize 50
typedef int DataType;
typedef struct
{
DataType list[Maxsize];
int size;
}Seqlist;
#include "seqlist.h"
void main()
{
Seqlist l1,l2,l3;
int i=0;
int a,b,c,d;
listInitiate(&l1);
printf("请输入第一个顺序表的元素,按'-1'回车结束;");
scanf("%d",&a);
while(a!=-1)
{
l1.list[i]=a;
i++;
scanf("%d",&a);
}
l1.list[i]=-1;
listInitiate(&l2);
printf("请输入第二个顺序表的元素,按'-1'回车结束;");
scanf("%d",&c);
i=0;
while(c!=-1)
{
l2.list[i]=c;
i++;
scanf("%d",&c);
}
l2.list[i]=-1;
listInitiate(&l3);
listAdd(&l1,&l2,&l3);
}
void listInitiate(Seqlist *l)
{
l->size=0;
}
int listLength(Seqlist l)
{
return l.size;
}
int listInsert(Seqlist *l,DataType x)
{
int i,j=0;
if(l->size>=Maxsize)
{
printf("满的");
return 0;
}
else
{while(x>l->list[i]&&i<l->size)
i++;
for(j=l->size;j>i;j--)
l->list[j]=l->list[j-1];
l->list[i]=x;
l->size++;
return 1;
}
}
int listGet(Seqlist l,int i,DataType *x)
{
if(i<0&&i>l.size-1)
{
printf("参数i不合格!\n");
return 0;
}
else
{
*x=l.list[i];
return 1;
}
}
void listAdd(Seqlist *l1,Seqlist *l2,Seqlist *l3)
{
int i=0,j=0,k=0;
while(l1->list[i]!=-1&&l2->list[j]!=-1)
{
if(l1->list[i]<l2->list[j])
{
l3->list[k]=l1->list[i];
i++;
k++;
}
else
{
l3->list[k]=l2->list[j];
j++;
k++;
}
}
while(l1->list[i]!=-1)
{
l3->list[k]=l1->list[i];
i++;
k++;
}
while(l2->list[j]!=-1)
{
l3->list[k]=l2->list[j];
j++;
k++;
}
printf("%d",l3->list[k]);
}
这是我写的,但最后运行不出来。
#include <stdio.h>
#define Maxsize 50
typedef int DataType;
typedef struct
{
DataType list[Maxsize];
int size;
}Seqlist;
#include "seqlist.h"
void main()
{
Seqlist l1,l2,l3;
int i=0;
int a,b,c,d;
listInitiate(&l1);
printf("请输入第一个顺序表的元素,按'-1'回车结束;");
scanf("%d",&a);
while(a!=-1)
{
l1.list[i]=a;
i++;
scanf("%d",&a);
}
l1.list[i]=-1;
listInitiate(&l2);
printf("请输入第二个顺序表的元素,按'-1'回车结束;");
scanf("%d",&c);
i=0;
while(c!=-1)
{
l2.list[i]=c;
i++;
scanf("%d",&c);
}
l2.list[i]=-1;
listInitiate(&l3);
listAdd(&l1,&l2,&l3);
}
void listInitiate(Seqlist *l)
{
l->size=0;
}
int listLength(Seqlist l)
{
return l.size;
}
int listInsert(Seqlist *l,DataType x)
{
int i,j=0;
if(l->size>=Maxsize)
{
printf("满的");
return 0;
}
else
{while(x>l->list[i]&&i<l->size)
i++;
for(j=l->size;j>i;j--)
l->list[j]=l->list[j-1];
l->list[i]=x;
l->size++;
return 1;
}
}
int listGet(Seqlist l,int i,DataType *x)
{
if(i<0&&i>l.size-1)
{
printf("参数i不合格!\n");
return 0;
}
else
{
*x=l.list[i];
return 1;
}
}
void listAdd(Seqlist *l1,Seqlist *l2,Seqlist *l3)
{
int i=0,j=0,k=0;
while(l1->list[i]!=-1&&l2->list[j]!=-1)
{
if(l1->list[i]<l2->list[j])
{
l3->list[k]=l1->list[i];
i++;
k++;
}
else
{
l3->list[k]=l2->list[j];
j++;
k++;
}
}
while(l1->list[i]!=-1)
{
l3->list[k]=l1->list[i];
i++;
k++;
}
while(l2->list[j]!=-1)
{
l3->list[k]=l2->list[j];
j++;
k++;
}
printf("%d",l3->list[k]);
}