数据结构——顺序表合并(C语言实现)

好久没来写博客了,最近开学社团的事情比较忙,然后之后的博客可能写数据结构和算法方面的比较多。
————————————————假装自己是分割线——————————————————
这里是将有序(从小到大)顺序表A,B 合并为一个有序(由小到大)顺序表C

#define MAXSIZE 100
#include<stdio.h>

// 定义数据结构,size为顺序表实际元素个数
typedef struct {
    int m[MAXSIZE];
    int size;
}list;

//创建
void creat(list *s)
{
    int n, len;
    printf("输入顺序表的长度:");
    scanf("%d", &len);
    s->size = len;
    printf("输入顺序表的元素:");
    for (int i = 0; i < len; i++)
    {
        scanf("%d", &n);
        s->m[i] = n;
    }
}

//输出
void print(list *s)
{
    for (int i = 0; i < s->size; i++)
        printf("%d ", s->m[i]);
    printf("\n");
}

//合并
void combine(list *a, list *b, list *c)  
{
    int i=0, j=0, k=0; 
    //同时扫描两个表 
    while(i<a->size && j<b->size) 
    {
        if(a->m[i]<=b->m[j]) 
        {
            c->m[k] = a->m[i]; 
            i++;         
            k++;         
        }
        else
        {
            c->m[k] = b->m[j];
            j++;            
            k++;         
        }
    }
    //A表扫完,B组未扫完 
    if(i==a->size)         
    {
        for(; j<b->size; j++)
        {
            c->m[k] = b->m[j];
            k++; 
        }        
    }
    if(j==b->size)              
    {
        for(; i<a->size; i++)
        {
            c->m[k] = a->m[i];
            k++; 
        }    
    }
    c->size=k;
}


int main()
{
    list a;
    list b;
    list c;
    creat(&a);
    creat(&b);
    print(&a);
    print(&b);
    combine(&a,&b,&c);
    print(&c);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值