标题:求两个集合的差集
只看楼主
WL2311296974
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:37
专家分:7
注 册:2017-3-30
结帖率:90%
已结贴  问题点数:10 回复次数:2 
求两个集合的差集

下面这些代码是求两个集合的交集

就是不知道如何求交集,求解!!!


#include <stdlib.h>
#include <stdio.h>
#define ElemType int
typedef struct LNode
{
 ElemType data;
 struct LNode*next;
}LNode,*LinkList;

LNode*create(ElemType data[],int n)
{
    LNode*head,*p,*rear;
    int k;
    head= (LNode*)malloc(sizeof(LNode)); /*head指向单链表的头结点*/
    head->next = NULL;
    rear=head;
    for(k=0;k<n;k++)
    {
    p= (LNode*)malloc(sizeof(LNode));
    p->data=data[k];
    p->next=NULL;
    rear->next=p;
    rear=p;   
    }
    return head;
}


void display(LNode*head)
{
    LNode*p;
    p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

LNode *inter(LNode*head1,LNode*head2)
{
    LNode*p,*q,*head3,*s;
    head3=(LNode*)malloc(sizeof(LNode));
    p=head1->next;
    q=head2->next;
    head3->next=NULL;
    while(p)
    {
        while(q)
        {
            if(p->data==q->data)
            {
            s=(LNode*)malloc(sizeof(LNode));
            s->data=p->data;
            s->next=head3->next;
            head3->next=s;
            break;
            }
        
            else
              q=q->next;
        }
              p=p->next;
              q=head2->next;
    }
        return head3;
}
   

void main()
{
    int data1[10],data2[10];
    int num1,num2,i;
    LNode*h1,*h2,*h3;
    printf("输入集合A中的元素数:");
    scanf("%d",&num1);
    printf("输入集合A中的数据元素:");
    for(i=0;i<num1;i++)
      scanf("%d",&data1[i]);
    printf("输入集合B中的元素数:");      
    scanf("%d",&num2);
          printf("输入集合B中的数据元素:");
          for(i=0;i<num2;i++)
           scanf("%d",&data2[i]);
           h1=create(data1,num1);
           h2=create(data2,num2);
           printf("生成如下两个链表\n");
           printf("链表1:");
           display(h1);
           printf("链表2:") ;
           display(h2);
           h3=inter(h1,h2);
           printf("两个集合的差C为:");
           display(h3);
}


搜索更多相关主题的帖子: include create 如何 
2017-06-14 17:07
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:9 
不管是交集还是差集,我建议先把两个集合做个排序,排序以后分别从链表头开始对两个集合的元素逐个比较。

比如做差集输出 。从两个链表头开始作比较,如果不同,把小的那个链表指针右移(并输出小的那个数据);继续比较下一个,如果遇到两个元素相同(则两个指针同时右移),如果其中一个集合已经遍历完了,那么可以直接输出剩下那个集合中的剩余元素。

做交集输出的方法原理上面基本相仿,建议楼主动动脑经想一下。

φ(゜▽゜*)♪
2017-06-14 21:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:1 
用哈希查重会不会比单纯排序更快呢~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-15 20:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477923-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.271474 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved