线性表-顺序表合并

2018-07-17  本文已影响0人  Co_zy

线性表合并

运行时限: 1000 ms 单次运行时限: 1000 ms 内存限制: 64 MB
总提交: 365次 通过: 105次

题目描述

将两个有序表A和B合并成一个有序表C

程序输入说明

第1行:有序表A
第2行:有序表B
(A、B中元素均为整数,且元素个数均不超过1000)

程序输出说明

合并后的有序表

程序输入样例

可见格式 带空格和换行符的格式 带空格和换行符的格式说明
1 3 5
3 4 7 9

程序输出样例

Original Transformed 带空格和换行符的格式说明
1 3 3 4 5 7 9
提示

如何读取一行数据?

参考:while(scanf("%d%c",&b[k++],&ch)==2 && ch!='\n');

评判系统的C较低,不支持C99
反复出现了runtime error的问题,原因是数组开的太小了,题目要求1000,我只开了100

#include <stdio.h>
#include <stdlib.h>
# define LIST_INIT_SIZE 1005

typedef struct
{
    int *elem;
    int length;
    int listsize;
} List;

void creat(List *l)
{
    char ch;
    int i = 0;
    l->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
    if(!l->elem)
        exit(0);
    while(scanf("%d%c",&l->elem[i++],&ch)==2 && ch!='\n');
    l->length = i;
}
void display(List *l1,List *l2,List *l3)
{
    int i=0,j,a=0,b=0;
    int m=l1->length;
    int n = l2->length;
    while(a<m && b<n)
    {
        if(l1->elem[a]<l2->elem[b])
            l3->elem[i++]=l1->elem[a++];
        else
            l3->elem[i++]=l2->elem[b++];
    }
    if(a==m)
    {
        for(j=b; j<n; j++)
            l3->elem[i++]=l2->elem[j];
    }
    else
    {
        for(j=a; j<m; j++)
            l3->elem[i++]=l1->elem[j];
    }
}
int main()
{
    List l1,l2,l3;
    int i;
    creat(&l1);
    creat(&l2);
    l3.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
    display(&l1,&l2,&l3);
    int m = l1.length;
    int n = l2.length;
    for(i=0; i<m+n-1; i++)
        printf("%d  ",l3.elem[i]);
    printf("%d  ",l3.elem[m+n-1]);
    return 0;

}
上一篇 下一篇

猜你喜欢

热点阅读