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++];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器