第三周 项目3 -- 求集合并集

  1. /* 
  2. *Copyright (c) 2017,烟台大学计算机与控制工程学院 
  3. *All rights reserved. 
  4. *文件名称: 
  5. *作    者:胡俊超 
  6. *完成日期:2017年9月25日 
  7. *版 本 号:v1.0 
  8. * 
  9.  *问题描述:有两个集合A和集合B,C=A且B,求集合C,用顺序表 
  10.  *输入描述:两个集合,A和B 
  11.  *程序输出:集合A和集合B的并集集合C 
  12. */  
  13. #include "list.h"  
    #include <stdio.h>  
      
    void unionList(SqList *LA, SqList *LB, SqList *&LC)  
    {  
        int lena,i;  
        ElemType e;  
        InitList(LC);  
        for (i=1; i<=ListLength(LA); i++) //将LA的所有元素插入到Lc中  
        {  
            GetElem(LA,i,e);  
            ListInsert(LC,i,e);  
        }  
        lena=ListLength(LA);         //求线性表LA的长度  
        for (i=1; i<=ListLength(LB); i++)  
        {  
            GetElem(LB,i,e);         //取LB中第i个数据元素赋给e  
            if (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中  
                ListInsert(LC,++lena,e);  
        }  
    }  
      
    //用main写测试代码  
    int main()  
    {  
        SqList *sq_a, *sq_b, *sq_c;  
        ElemType a[6]= {5,8,7,2,4,9};  
        CreateList(sq_a, a, 6);  
        printf("LA: ");  
        DispList(sq_a);  
      
        ElemType b[6]= {2,3,8,6,0};  
        CreateList(sq_b, b, 5);  
        printf("LB: ");  
        DispList(sq_b);  
        unionList(sq_a, sq_b, sq_c);  
        printf("LC: ");  
        DispList(sq_c);  
        return 0;  
    }

    #include <malloc.h>  
    #include "list.h"  
      
    //用数组创建线性表  
    void CreateList(SqList *&L, ElemType a[], int n)  
    {  
        int i;  
        L=(SqList *)malloc(sizeof(SqList));  
        for (i=0; i<n; i++)  
            L->data[i]=a[i];  
        L->length=n;  
    }  
      
    //初始化线性表InitList(L)  
    void InitList(SqList *&L)   //引用型指针  
    {  
        L=(SqList *)malloc(sizeof(SqList));  
        //分配存放线性表的空间  
        L->length=0;  
    }  
      
    //销毁线性表DestroyList(L)  
    void DestroyList(SqList *&L)  
    {  
        free(L);  
    }  
      
    //判定是否为空表ListEmpty(L)  
    bool ListEmpty(SqList *L)  
    {  
        return(L->length==0);  
    }  
      
    //求线性表的长度ListLength(L)  
    int ListLength(SqList *L)  
    {  
        return(L->length);  
    }  
      
    //输出线性表DispList(L)  
    void DispList(SqList *L)  
    {  
        int i;  
        if (ListEmpty(L)) return;  
        for (i=0; i<L->length; i++)  
            printf("%d ",L->data[i]);  
        printf("\n");  
    }  
      
    //求某个数据元素值GetElem(L,i,e)  
    bool GetElem(SqList *L,int i,ElemType &e)  
    {  
        if (i<1 || i>L->length)  return false;  
        e=L->data[i-1];  
        return true;  
    }  
      
    //按元素值查找LocateElem(L,e)  
    int LocateElem(SqList *L, ElemType e)  
    {  
        int i=0;  
        while (i<L->length && L->data[i]!=e) i++;  
        if (i>=L->length)  return 0;  
        else  return i+1;  
    }  
      
    //插入数据元素ListInsert(L,i,e)  
    bool ListInsert(SqList *&L,int i,ElemType e)  
    {  
        int j;  
        if (i<1 || i>L->length+1)  
            return false;   //参数错误时返回false  
        i--;            //将顺序表逻辑序号转化为物理序号  
        for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置  
            L->data[j]=L->data[j-1];  
        L->data[i]=e;           //插入元素e  
        L->length++;            //顺序表长度增1  
        return true;            //成功插入返回true  
    }  
      
    //删除数据元素ListDelete(L,i,e)  
    bool ListDelete(SqList *&L,int i,ElemType &e)  
    {  
        int j;  
        if (i<1 || i>L->length)  //参数错误时返回false  
            return false;  
        i--;        //将顺序表逻辑序号转化为物理序号  
        e=L->data[i];  
        for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移  
            L->data[j]=L->data[j+1];  
        L->length--;              //顺序表长度减1  
        return true;              //成功删除返回true  
    }</pre><br>  
    <br>  
    <pre></pre>  
    <pre name="code" class="cpp"><pre name="code" class="cpp">#define MaxSize 50  
    typedef int ElemType;  
    typedef struct  
    {  
        ElemType data[MaxSize];  
        int length;  
    } SqList;  
    void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表  
    void InitList(SqList *&L);//初始化线性表InitList(L)  
    void DestroyList(SqList *&L);//销毁线性表DestroyList(L)  
    bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)  
    int ListLength(SqList *L);//求线性表的长度ListLength(L)  
    void DispList(SqList *L);//输出线性表DispList(L)  
    bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)  
    int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)  
    bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)  
    bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)
    #endif  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值