首页 > 代码库 > 算法设计分析(44页)

算法设计分析(44页)

分别以两个(带头结点的)循环有序链表表示集合A和B,完成这两个集合并集的操作:

代码如下:

#include<stdio.h>typedef struct LNode    {    int data ;    struct LNode *next ;}LNode , *LinkList ;void union_OL(LinkList &La , LinkList &Lb )  {    LinkList pa = La->next->next ;    LinkList pb = Lb->next->next ;    LinkList rc = La->next ;    while(pa != La->next && pb !=Lb->next)  {        if((pa->data) < (pb->data)) {            rc->next = pa ;            rc = pa ;            pa = pa->next ;        }        else if((pa->data) > (pb->data))    {            rc->next = pb ;            rc = pb ;            pb = pb->next ;        }        else    {            rc->next = pa ;            rc = pa ;            pa = pa->next ;            pb = pb->next ;        }    }    if(pb==(Lb->next))        rc->next = pa ;    else{        Lb->next = La->next ;        La->next = pb ;        La = Lb ;    }    //printf("%d\n",La->next->next->data) ;    LinkList hrc = La->next->next ;    while(hrc != La->next)  {        printf("%d ",hrc->data) ;        hrc =hrc->next ;    }    printf("\n") ;}int main()  {    LinkList La , Lb ;    int a[] = {4,7,10,21,40,56} ;    int b[] = {7,9,21,68} ;    int i ;    LinkList ha = new LNode ;    La = ha ;    for(i = 0 ; i < 6 ; i++)    {        LinkList s = new LNode ;        s->data =http://www.mamicode.com/ a[i] ;        La->next = s ;        La = s ;    }    La->next = ha ;    LinkList hb = new LNode ;    Lb = hb ;    for(i = 0 ; i < 4 ; i++)   {        LinkList s = new LNode ;        s->data =http://www.mamicode.com/ b[i] ;        Lb->next = s ;        Lb = s ;    }    Lb->next = hb ;    /*LinkList hrc = Lb->next->next ;    printf("%d\n",hrc->data) ;    while(hrc != Lb->next)  {        printf("%d ",hrc->data) ;        hrc = hrc->next ;    }*/   //inkList rc = La->next ;   union_OL(La,Lb) ;    return 0 ;}