麻烦帮我开下,输出的结果中为什么会出现下面情况,怎样修改!!!是关于C语言数据结构的,谢谢!

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct
{
int *elem;//基地址
int length;//当前长度
int listsize;//总容量,以格式的大小为单位
}linklist;//建立线性表

int creat(linklist*L)
{
L->elem=(int*)malloc(100*sizeof(int));
if(!L->elem)exit(-2);
L->length=0;
L->listsize=100;
return 1;
}//构造一个空的线性表

int main()
{
linklist La,Lb,Lc;
creat(&La);
creat(&Lb);
creat(&Lc);
int a=0;
/*for(int a=0;a<3;a++)
{
printf("请输入La的第%d个数据:",a+1);
scanf("%d",&La.elem[a]);
La.length++;
}*/
printf("请输入升序集合La:");
scanf("%d",&La.elem[a]);
for(a=0;La.elem[a]!=0;)
{
scanf("%d",&La.elem[++a]);
La.length++;
}
printf("La的总长度为:%d\n",La.length);
printf("请输入升序集合Lb:");
scanf("%d",&La.elem[a]);
for(int b=0;Lb.elem[b]!=0;)
{
scanf("%d",&Lb.elem[++b]);
Lb.length++;
}
/*for(int b=0;b<4;b++)
{
printf("请输入Lb的第%d个数据:",b+1);
scanf("%d",&Lb.elem[b]);
Lb.length++;
}*/
printf("Lb的总长度为:%d\n",Lb.length);
int *pa_last=La.elem+La.length-1;
int *pb_last=Lb.elem+Lb.length-1;
int *pa=La.elem,*pb=Lb.elem,*pc=Lc.elem;
while((pa<=pa_last)&&(pb<=pb_last))
{
if(*pa<*pb)*pc++=*pa++;
else if(*pa>*pb) *pc++=*pb++;
else *pc++=*pa++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
printf("表Lc的数据为:\n");
for(int i=0;Lc.elem+i<pc;i++)//pc在之前多自加了一次,所以不是<=
printf("%d\n",*(Lc.elem+i+1));
printf("\n");
return 0;
}

楼主的程序还不错,只是有两个小问题,鄙人一点粗浅修改如下:
我的修改标记是 /*@*@*@ ......@*@*@*/,总共只有2处修改。分别在mani()函数中部Lb的输入语句和倒数第三行Lc的输出语句。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct
{
int *elem;//基地址
int length;//当前长度
int listsize;//总容量,以格式的大小为单位
}linklist;//建立线性表

int creat(linklist*L)
{
L->elem=(int*)malloc(100*sizeof(int));
if(!L->elem)exit(-2);
L->length=0;
L->listsize=100;
return 1;
}//构造一个空的线性表

int main()
{
linklist La,Lb,Lc;
creat(&La);
creat(&Lb);
creat(&Lc);
int a=0;
/*for(int a=0;a<3;a++)
{
printf("请输入La的第%d个数据:",a+1);
scanf("%d",&La.elem[a]);
La.length++;
}*/
printf("请输入升序集合La:");
scanf("%d",&La.elem[a]);
for(a=0;La.elem[a]!=0;)
{
scanf("%d",&La.elem[++a]);
La.length++;
}
printf("La的总长度为:%d\n",La.length);
printf("请输入升序集合Lb:");
scanf("%d",&Lb.elem[0]); /*@*@*@ 将&La.elem[a] 改为 &Lb.elem[0] 。 @*@*@*/
for(int b=0;Lb.elem[b]!=0;)
{
scanf("%d",&Lb.elem[++b]);
Lb.length++;
}
/*for(int b=0;b<4;b++)
{
printf("请输入Lb的第%d个数据:",b+1);
scanf("%d",&Lb.elem[b]);
Lb.length++;
}*/
printf("Lb的总长度为:%d\n",Lb.length);
int *pa_last=La.elem+La.length-1;
int *pb_last=Lb.elem+Lb.length-1;
int *pa=La.elem,*pb=Lb.elem,*pc=Lc.elem;
while((pa<=pa_last)&&(pb<=pb_last))
{
if(*pa<*pb)*pc++=*pa++;
else if(*pa>*pb) *pc++=*pb++;
else *pc++=*pa++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
printf("表Lc的数据为:\n");
for(int i=0;Lc.elem+i<pc;i++)//pc在之前多自加了一次,所以不是<=
printf("%d\n",*(Lc.elem+i)); /*@*@*@ 将*(Lc.elem+i+1)改为*(Lc.elem+i)。 @*@*/
printf("\n");
return 0;
}
不知道合不合楼主意思,呵呵,凑合看看吧。
最后,严厉批评一下一楼的回答态度和目的!十分违背互联网的分享精神和人类的互助品德,在这里谨代表我个人对他表示反对,望其改正。谢谢!:)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-02
结果没错啊追问

我有上百度Hi,可以加一下再聊吗?或者我的QQ是365017808,我们加一下再聊!

追答

先采纳再说

追问

如果你相信我的话那就先解决再采纳,如果最基本的信任都没有的话,其他的就不用谈了。

追答

你的指针有问题,就提示到这。采不采纳无所谓

追问

好吧!谢谢!