zoukankan      html  css  js  c++  java
  • 【数据结构】顺序表 求并集

    【数据结构】顺序表 求并集

    思想

    • 在第二个表中取某数据(取值操作)
    • 不在顺序表中(定位操作)
    • 就在后面(插入操作)

    时间复杂度(O(LA.length*LB.length))

    • 取值操作与执行时间与表长无关
    • 定位操作执行时间与表长无关
    • 插入操作的执行时间和表长成正比

    代码

    计算并集union.cpp

    /*==============
     * 求并集
     *
     * 包含算法: 2.1
     ===============*/
    
    #include "Union.h"      //**▲02 线性表**//
    
    /*
     * ████████ 算法2.1 ████████
     *
     * A=A∪B
     *
     * 计算La与Lb的并集并返回。
     * 由于生成的并集会拼接在La上,所以La的入参为指针类型。
     */
    void Union(SqList* La, SqList Lb) {
        int La_len, Lb_len;
        int i;
        ElemType e;
    
        // 求顺序表长度
        La_len = ListLength(*La);
        Lb_len = ListLength(Lb);
    
        for(i = 1; i <= Lb_len; i++) {
            // 取Lb中第i个元素赋给e
            GetElem(Lb, i, &e);
    
            // 若e不在La中则插入
            if(!LocateElem(*La, e, equal)) {
                ListInsert(La, ++La_len, e);
            }
        }
    }
    
    /*
     * 判等
     *
     * 判断两元素是否相等。
     * 如果相等,则返回TRUE,否则,返回FALSE。
     */
    Status equal(ElemType e1, ElemType e2) {
        return e1 == e2 ? TRUE : FALSE;
    }
    
    

    计算并集union.h

    /*==============
     * 求并集
     *
     * 包含算法: 2.1
     ===============*/
    
    #ifndef UNION_H
    #define UNION_H
    
    #include <stdio.h>
    #include "Status.h"     //**▲01 绪论**//
    #include "SqList.h"   //**▲02 线性表**//
    
    
    /*
     * ████████ 算法2.1 ████████
     *
     * A=A∪B
     *
     * 计算La与Lb的并集并返回。
     * 由于生成的并集会拼接在La上,所以La的入参为指针类型。
     */
    void Union(SqList* La, SqList Lb);
    
    /*
     * 判等
     *
     * 判断两元素是否相等。
     * 如果相等,则返回TRUE,否则,返回FALSE。
     */
    Status equal(ElemType e1, ElemType e2);
    
    #endif
    
    

    测试并集union_main.cpp

    #include <stdio.h>
    #include "Union.h"      //**▲02 线性表**//
    #include "SqList.h"     //**▲02 线性表**//
    
    // 测试函数,打印元素
    void PrintElem(ElemType e) {
        printf("%d ", e);
    }
    
    
    int main(int argc, char** argv) {
        ElemType a[5] = {5, 2, 1, 3, 9};
        ElemType b[7] = {7, 2, 6, 9, 11, 3, 10};
        SqList La, Lb;
        int i;
    
        // 初始化La
        InitList(&La);
        for(i = 1; i <= 5; i++) {
            ListInsert(&La, i, a[i - 1]);
        }
    
        // 初始化Lb
        InitList(&Lb);
        for(i = 1; i <= 7; i++) {
            ListInsert(&Lb, i, b[i - 1]);
        }
    
        // 输出La
        printf("La = ");
        ListTraverse(La, PrintElem);
    
        // 输出Lb
        printf("Lb = ");
        ListTraverse(Lb, PrintElem);
    
        // 输出新表La的内容
        printf("La = La∪Lb = ");
        Union(&La, Lb);
        ListTraverse(La, PrintElem);
    
        return 0;
    }
    
    
  • 相关阅读:
    selenium入门:基于界面的自动化测试
    selenium入门:环境搭建
    Python入门:迭代器
    Python入门:生成器并行(协程)
    Python入门:生成器应用-斐波拉契数列
    Python入门:生成器定义
    Python入门:装饰器案例3
    Python入门:装饰器案例2
    Python入门:装饰器案例1
    Spring MVC 上传文件---依赖引用
  • 原文地址:https://www.cnblogs.com/SiriusZHT/p/14310787.html
Copyright © 2011-2022 走看看