回 帖 发 新 帖 刷新版面

主题:为什么出错了!?应该没错的啊

#define MAX 15
#define ERROR 0
#define OK 1
#include<stdio.h>
#include"stdlib.h"
typedef struct
{
    int a[MAX];
    int last;
}SeqList;

void getchange(SeqList *LA,SeqList *LB,SeqList *LC)//*非递减有序排列
{
    int i,j,k;
    i=0;j=0;k=0;
    while(i<=LA->last&&j<=LB->last)
        if(LA->a[i]<=LB->a[j])
        {
            LC->a[k]=LA->a[i];
            i++;k++;
        }
        else
        {
            LC->a[k]=LB->a[j];
            j++;k++;
        }
    while(i<=LA->last)//*当上面的循环结束时,LB已经全部输入到LC了
    {
        LC->a[k]=LA->a[i];
        i++;k++;
    }
    while(j<=LB->last)//*同上
    {
        LC->a[k]=LB->a[j];
        j++;k++;
    }
    LC->last=LA->last+LB->last+1;
}

void main()
{
    SeqList *LA;
    SeqList *LB;
    SeqList *LC;
    int i,j,k;
    LA=(SeqList *)malloc(sizeof(SeqList));
    LB=(SeqList *)malloc(sizeof(SeqList));
    LC=(SeqList *)malloc(sizeof(SeqList));
    printf("输入原有的顺序表LA,LB\n");
    printf("顺序表LA的长度");
    scanf("%d",&(LA->last));
    for(i=0;i<LA->last;i++)
        scanf("%d",&LA->a[i]);
    printf("顺序表LB的长度");
    scanf("%d",&(LB->last));
    for(j=0;j<LB->last;j++)
        scanf("%d",&LB->a[i]);
    getchange(LA,LB,LC);
    for(k=0;k<LC->last;k++)
        printf("%d ",LC->a[k]);
    free(LA);
    free(LB);
    free(LC);
}
题目是:
有两个顺序表LA,LB,其元素为非递减有序排列,编写一个算法,将它们合并成一个顺序表LC
要求LC也是非递减有序排列!LA=(2,2,3),LB=(1,3,3,4)
则求得的LC应该是(1,2,2,3,3,3,4)

回复列表 (共5个回复)

沙发

自己找错 才是硬道理

板凳


就是没找到,才叫人帮忙的啊!!

3 楼


#define MAX 15
#define ERROR 0
#define OK 1
#include<stdio.h>
#include"stdlib.h"
typedef struct
{
    int a[MAX];
    int last;
}SeqList;

void getchange(SeqList *LA,SeqList *LB,SeqList *LC)//*非递减有序排列
{
    int i,j,k;
    i=0;j=0;k=0;
    while(i<LA->last&&j<LB->last)   [color=FF0000]// 不要等于[/color]
    {
        if
        {
            LC->a[k]=LA->a[i];
            i++;k++;
        }
        else
        {
            LC->a[k]=LB->a[j];
            j++;k++;
        }
    while(i<LA->last)//*当上面的循环结束时,LB已经全部输入到LC了  [color=FF00FF]// 不要等于[/color]    {
        LC->a[k]=LA->a[i];
        i++;k++;
    }
    while(j<LB->last)//*同上  [color=008080][color=0000FF][color=FF0000] // 不要等于[/color][/color][/color]   {
        LC->a[k]=LB->a[j];
        j++;k++;
    }
   [size=2] LC->last = LA->last + LB->last;[/size]}  // 合成链表长度等于原长度之和,不应该加一

void main()
{
    SeqList *LA;
    SeqList *LB;
    SeqList *LC;
    int i,j,k;
    LA=(SeqList *)malloc(sizeof(SeqList));
    LB=(SeqList *)malloc(sizeof(SeqList));
    LC=(SeqList *)malloc(sizeof(SeqList));
    printf("输入原有的顺序表LA,LB\n");
    printf("顺序表LA的长度");
    scanf("%d",&(LA->last));
    for(i=0;i<LA->last;i++)
        scanf("%d",&LA->a[i]);
    printf("顺序表LB的长度");
    scanf("%d",&(LB->last));
    for(j=0;j<LB->last;j++)
        scanf("%d",&LB->a[j]);  [color=FF0000]// 这里最关键,你用的是i!!![/color]
    getchange(LA,LB,LC);
    for(k=0;k<LC->last;k++)
        printf("%d ",LC->a[k]);
    free(LA);
    free(LB);
    free(LC);
}

4 楼


都是一些小错误啊,楼主细心点哦!

void getchange(SeqList *LA,SeqList *LB,SeqList *LC)//*非递减有序排列
{
    int i,j,k;
    i=0;j=0;k=0;
    while(i<LA->last && j<LB->last)  [color=FF0000]// 不要等于[/color]
        if(LA->a[i]<=LB->a[j])
        {
            LC->a[k]=LA->a[i];
            i++;k++;
        }
        else
        {
            LC->a[k]=LB->a[j];
            j++;k++;
        }
    while(i < LA->last)//*当上面的循环结束时,LB已经全部输入到LC了 [color=FF0000]// 不要等于[/color]
    {
        LC->a[k]=LA->a[i];
        i++;k++;
    }
    while(j < LB->last)  //*同上 [color=FF0000]// 不要等于[/color]
    {
        LC->a[k]=LB->a[j];
        j++;k++;
    }
    LC->last=LA->last+LB->last; [color=FF00FF]// 合成链表等于原长度之和,不要加一啊[/color]
}

void main()
{
    SeqList *LA;
    SeqList *LB;
    SeqList *LC;
    int i,j,k;
    LA=(SeqList *)malloc(sizeof(SeqList));
    LB=(SeqList *)malloc(sizeof(SeqList));
    LC=(SeqList *)malloc(sizeof(SeqList));
    printf("输入原有的顺序表LA,LB\n");
    printf("顺序表LA的长度");
    scanf("%d",&(LA->last));
    for(i=0;i<LA->last;i++)
        scanf("%d",&LA->a[i]);
    printf("顺序表LB的长度");
    scanf("%d",&(LB->last));
    for(j=0;j<LB->last;j++)
        scanf("%d",&LB->a[j]);   [color=FF0000]// 这里很粗心哦,你用的i[/color]
    getchange(LA,LB,LC);
    for(k=0;k<LC->last;k++)
        printf("%d ",LC->a[k]);
    free(LA);
    free(LB);
    free(LC);
}

5 楼


谢谢了!呵呵[em2]

我来回复

您尚未登录,请登录后再回复。点此登录或注册