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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nicht_sehen/article/details/82686822

好久没来写博客了,最近开学社团的事情比较忙,然后之后的博客可能写数据结构和算法方面的比较多。
————————————————假装自己是分割线——————————————————
这里是将有序(从小到大)顺序表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);
}

猜你喜欢

转载自blog.csdn.net/Nicht_sehen/article/details/82686822