c语言数据结构之顺序线性表的合并、并集

//#include "list_test.c"

//#include "link_list_test.c"

#include "List.h"
#include "LinkList.h"
#include "utils.c"


void MergeList(const List * l1,const List * l2,List * l3);
void list_union(List * l1,List * l2,List * l3);

void print(int data);

int main() {

//    list_test();
//    link_list_test();
    List l1,l2,l3;
    InitList(&l1);
    InitList(&l2);
    InitList(&l3);

    insert(&l1,3);
    insert(&l1,5);
    insert(&l1,8);
    insert(&l1,11);

    ListTraverse(&l1,print);
    printf("\n");
    insert(&l2,2);
    insert(&l2,6);
    insert(&l2,8);
    insert(&l2,9);
    insert(&l2,11);
    insert(&l2,15);
    insert(&l2,20);

    ListTraverse(&l2,print);
    printf("\n");

    MergeList(&l1,&l2,&l3);

    ListTraverse(&l3,print);
    printf("\n");

    DestroyList(&l3);
    InitList(&l3);
    list_union(&l1,&l2,&l3);
    ListTraverse(&l3,print);
    printf("\n");
    return 0;
}


void print(int data)
{
    printf("%d ",data);

}
/**
 * l1l2合并为l3
 * @param l1
 * @param l2
 * @param l3
 */
void MergeList(const List * l1,const List * l2,List * l3)
{

    int i=0,j=0;

    int data1,data2;
    while(ilength && jlength)
    {
        data1 = *GetElem(l1, i);
        data2 = *GetElem(l2,j);
        if(data1 <= data2)
        {
            insert(l3,data1);
            insert(l3,data2);
        }else{
            insert(l3,data2);
            insert(l3,data1);
        }

        i++,j++;
    }

    while(ilength)
    {
        insert(l3,*GetElem(l1,i));
        i++;
    }

    while(jlength)
    {
        insert(l3,*GetElem(l2,j));
        j++;
    }
}


//并集操作
void list_union(List * l1,List * l2,List * l3)
{
    int i=0,j=0,n=0;

    int data1,data2;
    while(ilength && jlength)
    {
        data1 = *GetElem(l1, i);
        data2 = *GetElem(l2,j);
        if(data1 < data2)
        {
            insert(l3,data1);
            insert(l3,data2);
            n+=2;
        }else if(data1 == data2){
            insert(l3,data1);
            n++;
        }
        else{
            insert(l3,data2);
            insert(l3,data1);
            n+=2;
        }

        i++,j++;
    }

    while(ilength)
    {
        if(*GetElem(l3,n-1) == *GetElem(l1,i))
        {
            i++;
            continue;
        }
        insert(l3,*GetElem(l1,i));
        n++;
        i++;
    }

    while(jlength)
    {
        if(*GetElem(l3,n-1) == *GetElem(l2,j))
        {
            j++;
            continue;
        }
        insert(l3,*GetElem(l2,j));
        n++;
        j++;
    }
}


运行结果:

c语言数据结构之顺序线性表的合并、并集_第1张图片

你可能感兴趣的:(C/C++)