| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1030 人关注过本帖
标题:实在不知道哪里有问题(两个顺序表La,Lb合并成Lc,但是Lc输出乱码)
只看楼主 加入收藏
c764193441
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2012-9-23
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:6 
实在不知道哪里有问题(两个顺序表La,Lb合并成Lc,但是Lc输出乱码)
程序代码:
#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMMENT 10
#define ElemType int

typedef struct
{int *elem;

 int listlength;

 int listsize;}sqlist;


 int initlist(sqlist *L)

 {L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

 L->listlength=0;

 L->listsize=LIST_INIT_SIZE;

 return OK;}

 


 int loadsq(sqlist *L)

 {int i;

 for(i=0;i<L->listlength;i++)

 printf("  %d",L->elem[i]);

 printf("\n");

 return OK;}


 int listlength(sqlist *L)

 {return L->listlength;}



 int getelem(sqlist *L,int i,int e)

 {e=L->elem[i-1];

 return OK;}


 int listinsert(sqlist *L,int i,int e)

 {ElemType *newbase,*p,*q;
     if(i<1||i>L->listlength+1)

 return ERROR;

 if(L->listlength>=L->listsize)

 {newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMMENT)*sizeof(ElemType));

 if(!newbase)

 return ERROR;

 L->elem=newbase;

 L->listsize+=LISTINCREMMENT;}

 q=&(L->elem[i-1]);

 for(p=&(L->elem[L->listlength-1]);p>=q;--p)

 *(p+1)=*p;

 *q=e;

 ++(L->listlength);

 return OK;

 }


 void mergelist(sqlist *La,sqlist *Lb,sqlist *Lc)

 {

 int i,j,k,La_len,Lb_len,ai,bj;

 i=j=1;k=0;

 La_len=listlength(La);Lb_len=listlength(Lb);

 while((i<=La_len)&&(j<=Lb_len))

 {getelem(La,i,ai);getelem(Lb,j,bj);

 if(ai<=bj)

 {listinsert(Lc,++k,ai);++i;loadsq(Lc);}

 else

 {listinsert(Lc,++k,bj);++j;}}

 while(i<=La_len)

 {getelem(La,i++,ai);listinsert(Lc,++k,ai);}

 while(j<=Lb_len)

 {getelem(Lb,j++,bj);listinsert(Lc,++k,bj);}

 loadsq(Lc);}

 



 int main()

 {int an,bn,i,e;

 sqlist La,Lb,Lc;

 initlist(&La);

 scanf("%d",&an);

 for(i=1;i<=an;i++)

 {scanf("%d",&e);

 listinsert(&La,i,e);}

 printf("LIST A is:");

 loadsq(&La);

 initlist(&Lb);

 scanf("%d",&bn);

 for(i=1;i<=bn;i++)

 {scanf("%d",&e);

 listinsert(&Lb,i,e);}

 printf("LIST B is:");

 loadsq(&Lb);

 printf("LIST C is :");

 initlist(&Lc);

 mergelist(&La,&Lb,&Lc);

 return 0;

 }
2012-10-05 12:46
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:1 
回复 楼主 c764193441
这代码。。。
2012-10-06 14:46
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:3 
看你的思路应该是正确的,然后你可以一点点的调试,看到底错在哪里,例如初始化是否成功?能不能输出两个顺序表,如果这些都正确,那么就是合并的错误了,其实还有一个可能的问题,就是你的没错而是编译器的问题,因为如果是TC的话,那么应该不支持你的这种也就是scanf语句之间不能有其他的语句,想pringf之类的,否则会出问题,不知道对不对

程序代码:
int main()
{int an,bn,i,e;
sqlist La,Lb,Lc;
initlist(&La);
scanf("%d",&an);
for(i=1;i<=an;i++)
{scanf("%d",&e);
listinsert(&La,i,e);}
printf("LIST A is:");
loadsq(&La);
initlist(&Lb);
scanf("%d",&bn);
for(i=1;i<=bn;i++)
{scanf("%d",&e);
listinsert(&Lb,i,e);}
printf("LIST B is:");
loadsq(&Lb);
printf("LIST C is :");
initlist(&Lc);
mergelist(&La,&Lb,&Lc);
return 0;
}
2012-10-06 15:03
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:6 
//如果是c++源文件
程序代码:
int getelem(sqlist *L,int i,int &e)
{
    e=L->elem[i-1];

    return OK;
}

//如果是c源文件,  调用的时候传地址
程序代码:
int getelem(sqlist *L,int i,int *e)
{
    *e=L->elem[i-1];

    return OK;
}



 
2012-10-06 16:04
c764193441
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2012-9-23
收藏
得分:0 
回复 4楼 寒风中的细雨
谢啦,找到问题所在了,我创建文件时的后缀名是.c,后来换成.cpp再调试一下就行了
2012-10-06 16:30
c764193441
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2012-9-23
收藏
得分:0 
回复 3楼 chuanglan
嗯,谢啦,刚学习数据结构而已,以后要多多指教
2012-10-06 16:33
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
回复 6楼 c764193441
看来确实是C语言在某些方面真的不如C++的,输入语句就经常让我纠结,,,,我
2012-10-06 16:44
快速回复:实在不知道哪里有问题(两个顺序表La,Lb合并成Lc,但是Lc输出乱码)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029220 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved