Code1010 2017-08-14 03:54 采纳率: 100%
浏览 918
已采纳

c语言这串代码编译没问题啊 为什么不显示呢

就是两个顺序表合并的问题 不知道代码哪出了问题 求指教

 #include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define Maxsize 50
typedef struct
{
  int data[Maxsize];
  int length;

}Sqlist;
void ListInsert(Sqlist *l,int i,int e)
{

   int j;
    if(i<1||i>l->length+1)
        exit(-1);
    if(l->length>=Maxsize)
        exit(-1);
    for(j=l->length;j>=i;j--)
        l->data[j]=l->data[j-1];
    l->data[i-1]=e;
    l->length++;
}
void dislist(Sqlist *l)
{
    int i;
    for(i=0;i<l->length;i++)
        printf("%d ",l->data[i]);
    printf("\n");
}
void exchange(Sqlist *a,Sqlist *b,Sqlist *c)
{
    int i=0,j=0,k=0;
    while((i<a->length)&&(j<b->length))
    {
        if(a->data[i]<b->data[j])
            c->data[k++]=a->data[i++];
        else if(a->data[i]>b->data[j])
            c->data[k++]=b->data[j++];
    }
    while(i<a->length)
        c->data[k++]=a->data[i++];
    while(j<b->length)
        c->data[k++]=b->data[j++];
    c->length=k;
}
int main()
{
    Sqlist *a,*b,*c;
    a=(Sqlist*)malloc(sizeof(Sqlist));
    a->length=0;
    b=(Sqlist*)malloc(sizeof(Sqlist));
    b->length=0;
    c=(Sqlist*)malloc(sizeof(Sqlist));
    c->length=0;
    ListInsert(a,1,2);
    ListInsert(a,2,3);
    ListInsert(a,3,4);
    ListInsert(a,4,55);
    ListInsert(a,5,123);
    ListInsert(b,1,6);
    ListInsert(b,2,34);
    ListInsert(b,3,56);
    ListInsert(b,4,67);
    ListInsert(b,5,123);
    ListInsert(b,6,234);
    ListInsert(b,7,1234);
    exchange(a,b,c);
    printf("顺序表A:");
    dislist(a);
    printf("顺序表B:");
    dislist(b);
    printf("顺序表C: ");
    dislist(c);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 怪叔叔爱猫猫 2017-08-14 05:45
    关注
     if (a->data[i] < b->data[j])
        c->data[k++] = a->data[i++];
    else if (a->data[i] > b->data[j])
        c->data[k++] = b->data[j++];
    

    观察这个,你发现了什么,如果a,b里有相同的值,你的程序就卡住了~~~你这个相当于归并排序里的合并数组,两种情况的话
    (a->data[i] > b->data[j])应该改为 >= ,或者你可以直接不用else if ,把else 后的 if 去掉,因为如果不是小于的话,那肯定就是大于等于了。
    建议改为

     if (a->data[i] < b->data[j])
        c->data[k++] = a->data[i++];
    else
        c->data[k++] = b->data[j++];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!