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


    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++;
    }
  • 相关阅读:
    python读写文件模式的区别
    【Terminal】终端美化
    【Macintosh】MAC基本使用
    【MySQL】使用mysql数据量统计
    软件测试自学还是报班好?需要掌握哪些技能?
    400页共计800道软件测试面试真题汇总!超全干货
    软件测试是吃青春饭的吗?30岁后软件测试该何去何从?
    leetcode_链表操作1
    [数据库系列之MySQL] Mysql整体架构浅析一
    Ubuntu 配置谷歌Android Test Station
  • 原文地址:https://www.cnblogs.com/geziyu/p/9606281.html
Copyright © 2020-2023  润新知