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


    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++;
    }
  • 相关阅读:
    c++第十八章-(容器和算法)
    07表与表之间的关系
    06约束
    01 Hello World!
    05文件合并脚本--By Mark Lutz
    04文件分割器脚本
    05数据库用户操作
    03扫描模块搜索路径
    02扫描目录树
    01扫描单个目录
  • 原文地址:https://www.cnblogs.com/geziyu/p/9606281.html
Copyright © 2020-2023  润新知