第3周项目3 求集合并集

  1. /*      
  2. Copyright (c)2015,烟台大学计算机与控制工程学院      
  3. All rights reserved.      
  4. 文件名称:项目3--求集合并集.cpp      
  5. 作    者:陈胜男    
  6. 完成日期:2015年10月9日      
  7. 版 本 号:v1.0      
  8.       
  9. 问题描述:假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示, 
  10.           即线性表中的数据元素即为集合中的成员。 
  11.           设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法, 
  12.           求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。 
  13.  
  14.  
  15. 输入描述: 若干数据 。    
  16. 程序输出: LA的集合数据、LB的集合数据、LC的集合数据。 
  17. */  
  18. 程序如下
  19.  #include<stdio.h>
    #include<malloc.h>
    typedef struct
    {
        int data[50];
        int length;
    
    }sqlist;
    void creatlist(sqlist *&,int a[],int );
    void DispList(sqlist *);
    void unionlist(sqlist *,sqlist *,sqlist *&);
    int main()
    {
        sqlist *sqa,*sqb,*sqc;
    	int a[6]= {5,8,7,2,4,9};
    	creatlist(sqa,a,6);
    	printf("LA:");
    	DispList(sqa);
    	int  b[6]= {2,3,8,6,0};
    	creatlist(sqb,b,6);
    	printf("LB:");
    	DispList(sqb);
        unionlist(sqa,sqb,sqc);
    	printf("LC:");
    	DispList(sqc);
    
    
    
    }
    void creatlist(sqlist *&l,int a[],int n)
    {
    	int i;
        l=(sqlist *)malloc(sizeof(sqlist));
        for(i=0;i<n;i++)
    	{
    		l->data[i]=a[i];
    	}
    
    	l->length=n;
    }
    void DispList(sqlist *l)
    {
    	int i;
    	for(i=0;i<l->length;i++)
    	{
    		printf("%d ",l->data[i]);
    	}
    	printf("\n");
    }
    void unionlist(sqlist *a,sqlist *b,sqlist *&c)
    {
    	c=(sqlist *)malloc(sizeof(sqlist));
    	int i,j=0,k=0,l=0;
    	c->length=0;
    	for(i=0;i<a->length;i++)
    	{
    		c->data[i]=a->data[i];
    		c->length++;
    	}
    	while(j<b->length)
    	{
    		while(b->data[j]!=a->data[k]&&k<b->length)
    		{
    			k++;
    		}
    		if(k==b->length)
    		{
    			c->data[i]=b->data[j];
    			i++;
    			c->length++;
    		}
    		k=0;
    		j++;
    	}
    }

    运行结果如下
  20. 知识点总结:线性表的建立和基本运算
  21. 学习心得:多练
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值