线性表顺序存储—合并线性表

1、合并线性表

  集合A和集合B分别用两个线性表LA和LB表示,求A∪B并用线性表LA表示。从LB中逐一取出元素,判断该元素是否存在LA中,若不在则将该元素插入LA中。

void CombineSqList(SqList &La,SqList &Lb){
    int i,j;
    for(i=0;i<Lb.length;i++){
        int cout=0;
        for(j=0;j<La.length;j++){
            if(La.elem[j]==Lb.elem[j])
                cout++;
        }
        if(cout==0)
            La.elem[La.length++]=Lb.elem[i];
    }
}

2、有序线性表的合并

  已知线性表LA和LB中数据元素分别按非递减顺序排列,现要求将它们合并成一个新的线性表LC,并使得LC中的元素也按照非递减顺序排列。线性表初始为空,依次扫描LA和LB中的数据元素,比较当前元素的值,将较小元素的值插入LC表尾之后,如此反复,直到一个线性表扫描完毕,然后将未完的那个线性表中余下的元素逐个插入到LC的表尾之后。

//顺序表的有序合并,有序合并的前提,两个顺序表已经排序好的 
void CombineSq(SqList &LA,SqList &LB,SqList &LC){//LA,LB是递增排序的
    ElemType *pa,*pb,*pc,*pa_last,*pb_last;
    LC.length=LA.length+LB.length;//新表的长度为两个表的长度之和
    LC.elem=new ElemType[LC.length];//分配空间
    //LC.elem=(ElemType *)malloc(LC.length*sizeof(ElemType));
    pc=LC.elem;//分别指向第一个元素
    pa=LA.elem;
    pb=LB.elem;
    pa_last=LA.elem+LA.length-1;//指向最后一个元素
    pb_last=LB.elem+LB.length-1;
    while((pa<=pa_last)&&(pb<=pb_last)){ 
        if(*pa<=*pb)
            *pc++=*pa++;//就行比较然后就行赋值
        else
            *pc++=*pb++;
    }
    while(pa<=pa_last)
        *pc++=*pa++;//把剩下的逐一插入
    while(pb<=pb_last)
        *pc++=*pb++;
}
posted @ 2018-09-10 11:43  无心小男  阅读(1166)  评论(0编辑  收藏  举报