//#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); } /** * 将l1和l2合并为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 && j length) { 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(i length) { insert(l3,*GetElem(l1,i)); i++; } while(j length) { 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(i length && j length) { 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(i length) { if(*GetElem(l3,n-1) == *GetElem(l1,i)) { i++; continue; } insert(l3,*GetElem(l1,i)); n++; i++; } while(j length) { if(*GetElem(l3,n-1) == *GetElem(l2,j)) { j++; continue; } insert(l3,*GetElem(l2,j)); n++; j++; } }
运行结果: