数据结构(C语言)顺序表的合并

#include<stdio.h>#include<malloc.h>#defineok1#defineerror0#defineLIST_INT_SIZE10#defi... #include<stdio.h>
#include<malloc.h>
#define ok 1
#define error 0
#define LIST_INT_SIZE 10
#define elemtype int
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist;
int Init_sqlist(sqlist *la)
{
(*la).elem=(elemtype*)malloc(LIST_INT_SIZE*sizeof(elemtype));
if(!(*la).elem)return error;
(*la).length=0;
(*la).listsize=LIST_INT_SIZE;
return ok;
}
void mergelist_sq(sqlist la,sqlist lb,sqlist &lc)
void main()
{
int i;sqlist la,lb,lc;
Init_sqlist(&la);
Init_sqlist(&lb);
for(i=0;i<5;i++)
scanf("%d",la.elem[i]);
la.length=5;
for(i=0;i<5;i++)
scanf("%d",lb.elem[i]);
lb.length=5;
mergelist_sq(la,lb,lc);
}
void mergelist_sq(sqlist la,sqlist lb,sqlist &lc)
{
int *pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;pb=lb.elem;
lc.listsize=la.length+lb.length;
pc=lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<=*pb)*pc++=*pa++;
else *pc++=*pb++;}
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pb_last) *pc++=*pb++;
for(i=0;i<lc.listsize-1;i++)
printf("%d,",lc.elem[i]);
}
运行时有错误 帮忙修改一下吧 谢啦
展开
 我来答
电子数码小百科NW
2020-02-16 · TA获得超过6493个赞
知道答主
回答量:15
采纳率:0%
帮助的人:4006
展开全部

1、c语言是没有引用的,可以使用一个const指针来模拟引用void InitList(SqList *L){L->last=0;}。

2、这个是顺序表的初始化,不用管int LenList(SqList L){return L.last;}。

3、插入操作,这一步是关键,插入顺序表int InsertList(SqList *L,int i,ElemType x){int k;if(L->last>=MAX){printf("表已满,无法插入\n");return 0}else if(i<0 || i>L->last+1){printf("插入位置不合法\n");return 0;}。

4、这是接着上面的第二步,判断的else{for(k=L->last;k>i-1;k--)L->elem[k]=L->elem[k-1];L->elem[i-1]=x;L->last++;return 0;}。

5、canf(%d",&a) 是读取整型变量a在内存中的地址,而scanf("%d",a)是读取整型变量a的值。就完成了。

金鱼8884
2015-10-07 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14950
学生

向TA提问 私信TA
展开全部
#include<stdio.h>

#define NUM 20   //宏定义

void p1(int x[] , int y[] , int i , int j);

void p2(int x[] , int y[] , int i , int j);

void p3(int x[] , int y[] , int i , int j);
//以上三个是函数声明

void p1(int x[] , int y[] , int i , int j)

{

  int m,n,a,b;

  int k = 0 ,g = 0;

  int c[NUM];

  for(m = 0 ; m < i ; m ++ )

   {  for(n = 0 ; n < j ; n ++ )

        {

             if(x[m] == y[n])  {x[m] = 0 ; y[n] = 0;break;} //相同元素赋值0

        }   

    }

    for( a = 0 ; a < i ; a++)

    {

     if( x[a] != 0 ) c[k++] = x[a] ;

     else continue;

    }

     for( b = 0 ; b < j ; b++)

    {

     if( y[b] != 0 ) c[k++] = y[b] ;

     else continue;

    }

    while(c[g])

    {printf("%d ",c[g++]);}

    printf("\n");

}

void p2(int x[] , int y[] , int i , int j)

{ int m, n,a,b,q ,temp;

  int c[NUM];

    for( m = 0 ; m < i ; m++)

    {c[m] = x[m];}

    for( n = 0  ; n < j ; n ++)

   {c[n+m] = y[n];}

   for( a = 0 ; a < n ; a++)

       for(b = 0 ; b < n ; b ++)

       {

             if(c[b]>c[b+1]) {temp = c[b] ; c[b] = c[b+1] ; c[b+1] = temp ; }

       }

   for( q = 0 ; q < n+m ; q ++)

   {printf("%d ",c[q]);

   }
   printf("\n");
}

void p3(int x[] , int y[] , int i , int j)

{int m, n,a,b,q ,temp;

  int c[NUM];

    for( m = 0 ; m < i ; m++)

    {c[m] = x[m];}

    for( n = 0  ; n < j ; n ++)

   {c[n+m] = y[n];}

   for( a = 0 ; a < n ; a++)

       for(b = 0 ; b < n ; b ++)

       {

             if(c[b]<c[b+1]) //判断是否满足,然后两个数调换
             {temp = c[b] ; c[b] = c[b+1] ; c[b+1] = temp ; }

       }

   for( q = 0 ; q < n+m ; q ++)

   {printf("%d ",c[q]);

   }

}

int main()

{

  int a[4]={3,5,8,11};

  int b[7]={2,6,8,9,11,15,20};

//  p1(a,b,4,7);

  p2(a,b,4,7);

//  p3(a,b,4,7);

return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
恭奥功昊磊
2019-08-04 · TA获得超过3854个赞
知道大有可为答主
回答量:3184
采纳率:32%
帮助的人:191万
展开全部
程序没什么大的毛病。。只是一些编写代码时的小疏忽
#include<stdio.h>
#include<malloc.h>
#define
ok
1
#define
error
0
#define
LIST_INT_SIZE
10
#define
elemtype
int
typedef
struct{
elemtype
*elem;
int
length;
int
listsize;
}sqlist;
int
Init_sqlist(sqlist
*la)
{
(*la).elem=(elemtype*)malloc(LIST_INT_SIZE*sizeof(elemtype));
if(!(*la).elem)return
error;
(*la).length=0;
(*la).listsize=LIST_INT_SIZE;
return
ok;
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
&lc)
//
忘了加;
void
main()
{
int
i;sqlist
la,lb,lc;
Init_sqlist(&la);
Init_sqlist(&lb);
for(i=0;i<5;i++)
scanf("%d",la.elem[i]);
//
应该改为
scanf(
"%d",&la.elem[i]
);
la.length=5;
for(i=0;i<5;i++)
scanf("%d",lb.elem[i]);
//
同上
lb.length=5;
mergelist_sq(la,lb,lc);
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
&lc)
{
int
*pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;pb=lb.elem;
lc.listsize=la.length+lb.length;
pc=lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<=*pb)*pc++=*pa++;
else
*pc++=*pb++;}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
for(i=0;i<lc.listsize-1;i++)
//
改为for(
i=0;
i<lc.listsize;
i++
)
printf("%d,",lc.elem[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
besthelp
推荐于2017-09-11 · TA获得超过1057个赞
知道小有建树答主
回答量:376
采纳率:100%
帮助的人:389万
展开全部
程序没什么大的毛病。。只是一些编写代码时的小疏忽
#include<stdio.h>
#include<malloc.h>
#define ok 1
#define error 0
#define LIST_INT_SIZE 10
#define elemtype int
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist;
int Init_sqlist(sqlist *la)
{
(*la).elem=(elemtype*)malloc(LIST_INT_SIZE*sizeof(elemtype));
if(!(*la).elem)return error;
(*la).length=0;
(*la).listsize=LIST_INT_SIZE;
return ok;
}
void mergelist_sq(sqlist la,sqlist lb,sqlist &lc) // 忘了加;
void main()
{
int i;sqlist la,lb,lc;
Init_sqlist(&la);
Init_sqlist(&lb);
for(i=0;i<5;i++)
scanf("%d",la.elem[i]); // 应该改为 scanf( "%d",&la.elem[i] );
la.length=5;
for(i=0;i<5;i++)
scanf("%d",lb.elem[i]); // 同上
lb.length=5;
mergelist_sq(la,lb,lc);
}
void mergelist_sq(sqlist la,sqlist lb,sqlist &lc)
{
int *pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;pb=lb.elem;
lc.listsize=la.length+lb.length;
pc=lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<=*pb)*pc++=*pa++;
else *pc++=*pb++;}
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pb_last) *pc++=*pb++;
for(i=0;i<lc.listsize-1;i++) // 改为for( i=0; i<lc.listsize; i++ )
printf("%d,",lc.elem[i]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
须庸镜雅艳
2019-12-17 · TA获得超过3657个赞
知道大有可为答主
回答量:3193
采纳率:28%
帮助的人:209万
展开全部
程序没什么大的毛病。。只是一些编写代码时的小疏忽
#include
#include
#define
ok
1
#define
error
0
#define
LIST_INT_SIZE
10
#define
elemtype
int
typedef
struct{
elemtype
*elem;
int
length;
int
listsize;
}sqlist;
int
Init_sqlist(sqlist
*la)
{
(*la).elem=(elemtype*)malloc(LIST_INT_SIZE*sizeof(elemtype));
if(!(*la).elem)return
error;
(*la).length=0;
(*la).listsize=LIST_INT_SIZE;
return
ok;
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
&lc)
//
忘了加;
void
main()
{
int
i;sqlist
la,lb,lc;
Init_sqlist(&la);
Init_sqlist(&lb);
for(i=0;i<5;i++)
scanf("%d",la.elem[i]);
//
应该改为
scanf(
"%d",&la.elem[i]
);
la.length=5;
for(i=0;i<5;i++)
scanf("%d",lb.elem[i]);
//
同上
lb.length=5;
mergelist_sq(la,lb,lc);
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
&lc)
{
int
*pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;pb=lb.elem;
lc.listsize=la.length+lb.length;
pc=lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa<=pa_last&&pb<=pb_last){
if(*pa<=*pb)*pc++=*pa++;
else
*pc++=*pb++;}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
for(i=0;i
评论
0
0
加载更多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式