合并顺序表(数据结构)

分别输入顺序表的个数,然后再依次输入非递减有序的顺序表,最后将其合并,要求合并后的顺序表依然非递减有序。(注:非递减有序是指顺序表中任意一个元素的值都大于等于其前驱(如果存在))。
测试输入1:
3
1 2 3
4
4 5 6 7
预期输出1:
7
1 2 3 4 5 6 7

测试输入2:
2
1 2
1
1
预期输出2:
3
1 1 2
补全如下代码·

#include<stdio.h>
#define MAX_SIZE 50
typedef struct {
    int data[MAX_SIZE];
    int length;
} Seqlist;
void insert(Seqlist *p, int x);
void show(Seqlist *p);
void insert(Seqlist *p, int x){
    int i=0;
    while(i<p->length && p->data[i]<=x)///这里要注意i<length,不然最后一个数字如果相同的话就会出错
        i++;///把x之前的都遍历下
    for(int j=p->length;j>i;j--)
    //进行合并
    /***********Begin***********/
        
        
        
    /************End************/     
        

}

void show(Seqlist *p){
    printf("%d\n", p->length); //输出合并后的顺序表元素个数
    printf("%d", p->data[0]);//输出合并后的顺序表
    for(int i=1;i<p->length;i++)
        printf(" %d", p->data[i]);
    printf("\n");
}

int main()
{
    Seqlist pa;
    int i, n, la, lb, a[MAX_SIZE], b[MAX_SIZE];
    
    scanf("%d", &la);//请输入第一个顺序表元素个数
    for(i=0;i<la;i++)
        scanf("%d", &a[i]);//请输入第一个顺序表
    
    scanf("%d", &lb);//请输入第二个顺序表元素个数
    for(i=0;i<lb;i++)
        scanf("%d", &b[i]);//请输入第二个顺序表
    
    pa.length = la;
    for(i=0;i<la;i++)
        pa.data[i] = a[i];
    
    for(i=0;i<lb;i++)
        insert(&pa, b[i]);
    
    show(&pa);
    
    return 0;
}

运行结果:

img

代码:

#include<stdio.h>
#define MAX_SIZE 50
typedef struct {
    int data[MAX_SIZE];
    int length;
} Seqlist;
void insert(Seqlist *p, int x);
void show(Seqlist *p);
void insert(Seqlist *p, int x){
    int i=0;
    while(i<p->length && p->data[i]<=x)///这里要注意i<length,不然最后一个数字如果相同的话就会出错
        i++;///把x之前的都遍历下
    for(int j=p->length;j>i;j--)
        //进行合并
        /***********Begin***********/
        p->data[j] = p->data[j-1];
    
    p->data[i] = x;
    p->length++;

        /************End************/     


}

void show(Seqlist *p){
    printf("%d\n", p->length); //输出合并后的顺序表元素个数
    printf("%d", p->data[0]);//输出合并后的顺序表
    for(int i=1;i<p->length;i++)
        printf(" %d", p->data[i]);
    printf("\n");
}

int main()
{
    Seqlist pa;
    int i, n, la, lb, a[MAX_SIZE], b[MAX_SIZE];

    scanf("%d", &la);//请输入第一个顺序表元素个数
    for(i=0;i<la;i++)
        scanf("%d", &a[i]);//请输入第一个顺序表

    scanf("%d", &lb);//请输入第二个顺序表元素个数
    for(i=0;i<lb;i++)
        scanf("%d", &b[i]);//请输入第二个顺序表

    pa.length = la;
    for(i=0;i<la;i++)
        pa.data[i] = a[i];

    for(i=0;i<lb;i++)
        insert(&pa, b[i]);

    show(&pa);

    return 0;
}


引用 皆我百晓生 小程序回复内容作答:

#include<stdio.h>
#define MAX_SIZE 50
typedef struct {
    int data[MAX_SIZE];
    int length;
} Seqlist;
void insert(Seqlist *p, int x);
void show(Seqlist *p);
void insert(Seqlist *p, int x){
    int i=0;
    while(i<p->length && p->data[i]<=x)///这里要注意i<length,不然最后一个数字如果相同的话就会出错
        i++;///把x之前的都遍历下
    for(int j=p->length;j>i;j--)
    {
        p->data[j]=p->data[j-1];///把j-1下标后面的元素都往后移一个位置
    }
    p->data[i] = x;///在x处插入
    p->length++;///插入后长度+1
    
 
}
 
void show(Seqlist *p){
    printf("%d\n", p->length); //输出合并后的顺序表元素个数
    printf("%d", p->data[0]);//输出合并后的顺序表
    for(int i=1;i<p->length;i++)
        printf(" %d", p->data[i]);
    printf("\n");
}
 
int main()
{
    Seqlist pa;
    int i, n, la, lb, a[MAX_SIZE], b[MAX_SIZE];
    
    scanf("%d", &la);//请输入第一个顺序表元素个数
    for(i=0;i<la;i++)
        scanf("%d", &a[i]);//请输入第一个顺序表
    
    scanf("%d", &lb);//请输入第二个顺序表元素个数
    for(i=0;i<lb;i++)
        scanf("%d", &b[i]);//请输入第二个顺序表
    
    pa.length = la;
    for(i=0;i<la;i++)
        pa.data[i] = a[i];
    
    for(i=0;i<lb;i++)
        insert(&pa, b[i]);
    
    show(&pa);
    
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^