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

/* 
*Copyright(c) 2017,YTU CS 
*All right reserved. 
*作    者:王铭泽. 
*完成日期:2017,9,10. 
*版 本 号: v1.0 
* 
*问题描述:   假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。
设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的
并集放在线性表LC中。
*输    入: 无
*输    出: 两个顺序表并集为一个顺序表的结果。
*/  

问题观察分析:这个问题里充分利用了顺序表的 多个算法,让我们体会了自己写算法用算法的过程。

首先解题思路基本上问:1.在基本算法基础上添加一个函数unionList,其作用是完成LA与LB顺序表的并集,其中函数用到的顺序表算法有初始化线性表、求线性表长度、获取单个字符元素、判断元素是否存在、插入元素这几大算法。2.函数内部先进行把A线性表完全传递给C的过程,此过程无需判断重复元素。之后进行B元素传递给C元素的过程,此过程要求判断是否与A中的元素重复。若不重复则添加。

代码如下:

#include <iostream>
#include "shunxuList.h"//对头文件的声明,头文件里包含有函数的声明。
using namespace std;

void unionList(SqList *LA, SqList *LB, SqList *&LC)
{
    int l,i;   //新线性表长度的存放为l。
    ElemType e;
    InitList(LC);
    //先将A传递给新线性表。
    for(i=1;i<=ListLength(LA);i++)
    {
        GetElem(LA,i,e);
        ListInsert(LC,i,e);
    }
    l=ListLength(LA);//纪录长度为下一步做准备。
    for(i=1;i<=ListLength(LB);i++)
    {
        GetElem(LB,i,e);
        //判断是否与A线性表重复
        if(!LocateElem(LA,e))
            ListInsert(LC,++l,e);
    }
    LC->length=l;
}
int main()
{
    //建立A表
  SqList *L1;
  ElemType a[5]={1,3,5,7,9};
  CreatList(L1,a,5);
  cout<<"线性表L1的内容为:"<<" ";
  DispList(L1);
  cout<<endl;

    //建立B表
  SqList *L2;
  ElemType b[5]={3,4,6,7,5};
  CreatList(L2,b,5);
  cout<<"线性表L2的内容为:"<<" ";
  DispList(L2);
  cout<<endl;

    //新表 不用建立在函数内完成建立。
  SqList *L3;
  unionList(L1,L2,L3);
  cout<<"线性表L3的内容为:"<<" ";
  DispList(L3);
  cout<<endl;


   return 0;
}
以上运行结果为:



总结及经验:

1.线性表以至于后来的链表需要注意第一个元素和最后一个元素的逻辑位置与物理位置的转换。

2.注意LocateList函数的算法。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值