线性表的合并

1.有序:

顺序表的合并:
线性表的合并线性表的合并

typedef struct
{
    ElementType *elem;
    int length;
    int listsize;
}Sqlist;
/*La、Lb均为递增序列*/
void mergeList(Sqlist La, Sqlist Lb, Sqlist &Lc) {
    Lc.listsize = La.length + Lb.length;
    ElementType *pa,*pb,*pc,*pa_last,*pb_last;
    pa = La.elem;
    pb = Lb.elem;
    pa_last = pa + La.length - 1;
    pb_last = pb + Lb.length - 1;
    pc = Lc.elem = (ElementType *)malloc(sizeof(ElementType) * Lc.listsize);
    while(pa <= pa_last && pb <= pb_last){
        if(*pa >= *pb)
            *pc++ = *pb++;
        else
            *pc++ = *pa++;
    }
    while(pa <= pa_last) {
        *pc++ = *pa++;    
    }
    while(pb <= pb_last) {
        *pc++ = *pb++;
    }    
}

View Code
链表的合并:
线性表的合并线性表的合并

typedef struct LNode
{
    ElementType data;
    struct LNode *next;
} *LinkList;
/*La和Lb两个升序链表最终合并成Lc链表(均带头节点)*/
void mergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
    LinkList pa,pb,pc;
    pa = La->next;
    pb = Lb->next;
    pc = Lc = La;//Lc始终指向La链表的头节点
    while(pa && pb){
        if(pa->data <= pb->data) {
            pc->next = pa;
            pc = pa;
            pa = pa->next;    
        } else {
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    pc->next = pa?pa:pb;//根据pa的null与否判断pc->next的值
    free(Lb);//除Lb的头节点外其他节点都将串成Lc链
}

View Code
两种方式时间复杂度均为O(n),但空间复杂度,前者由于需要重新分配空间存放Lc,因而更大。

2.无序:

求无序线性表La和Lb对应的集合A、B的并集AUB
线性表的合并线性表的合并

/*La、Lb为无序列表求,求两表的并集*/
void unionL(List &La,List Lb) {
    int e;
    La_len = ListLength(La);
    Lb_len = ListLength(Lb);
    for(int i = Lb_len;i > 0;i--) {
        getElem(Lb,i,e);
        if(!LocateElem(La,e,equal)) {
            InsertL(La,++La_len,e);
        }
    }
}

View Code
该算法时间复杂度为O(La_length * Lb_length)。因为线性表无序,因而每从Lb中取个元素出来,都需要用LocateElem()在La中遍历一次。
原文链接: https://www.cnblogs.com/gabygoole/p/5474518.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/233143

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:47
下一篇 2023年2月13日 下午3:47

相关推荐