求解两个集合的差集,集合是以单向链表存储

题目:
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。

链表结点的结构类型定义如下:

struct node
{
int elem;
node* next;
};
请完成函数void difference(node** LA , node* LB);

解题思路:
因为要求集合A和集合B的差集(A-B),结果保存在集合A中.
所以我们取出集合A中每一个元素,然后在集合B中寻找,找到即删除此节点 否则保留 。
此时while循环跳出只有两种情况,pb为NULL或者 pa->elem==pb->elem
当pb不为null时,即找出集合A和集合B的公有元素,此时要删除这个元素
pre(实现删除节点之后的链接)
当pre为NULL时,说明是首次找到A和B的公有元素,此时 *LA指向pa->next 所以*LA仍然是头结点
当pre不为NULL时, pre指向pa->next,顺利实现删除节点的链接。

void difference(node** LA,node* LB){
    node*pa,*pb,*pre,*q;
    pre=NULL;
    pa=*LA;/*LA是指向指针的指针,pa指向集合的元素*/
    while(pa){
        pb=LB;/*pb指向集合B的元素*/
        while(pb && pa->elem!=pb->elem) /*在链表LB中寻找与pa所指元素相等的节点*/
            pb=pb->next;
        if(pb){ /*pa所指元素与pb所指元素相等*/
            if(!pre){
                *LA=pa->next;
            }else{
                pre->next=pa->next;
            }
            q=pa;/*求差集 所以要删除pa节点*/
            pa=pa->next;
            free(q);
        }else{
            pre=pa;
            pa=pa->next;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,这是一个两个集合差集的程序: ``` def difference(a, b): return set(a) - set(b) a = [1, 2, 3, 4] b = [3, 4, 5, 6] print(difference(a, b)) ``` 输出结果为:`{1, 2}` ### 回答2: 两个集合差集,可以使用Python中的集合操作符`-`来实现。 首先,我们需要定义两个集合set1和set2,然后通过set1 - set2来取它们的差集。 下面是一个简单的示例代码: ```python set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} difference = set1 - set2 print("集合1减去集合2的差集:", difference) ``` 输出为:`{1, 2, 3}`,表示集合1中不包含集合2中的元素。 如果需要写一个函数两个集合差集,可以加入一些参数,如下所示: ```python def get_difference(set1, set2): difference = set1 - set2 return difference set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} result = get_difference(set1, set2) print("集合1减去集合2的差集:", result) ``` 输出为:`{1, 2, 3}`,表示集合1中不包含集合2中的元素。 注意,这里的集合使用大括号{}来表示的,集合中的元素是唯一且无序的。 ### 回答3: 可以使用Python的set()函数和‘-’运算符来计算两个集合差集。 ```python def difference(set1, set2): result = set1 - set2 return result set1 = set([1, 2, 3, 4, 5]) set2 = set([4, 5, 6, 7, 8]) diff = difference(set1, set2) print(diff) ``` 以上代码定义了一个名为difference的函数,它接受两个集合作为参数,并返回两个集合差集。在主程序中,我们创建了两个集合分别作为示例,并将它们作为参数传递给difference函数。然后,函数将计算两个集合差集,并将结果打印输出。 执行上述代码,将会输出结果为{1, 2, 3},即两个集合差集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值