已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。

来源:互联网 发布:mac 微信截图隐藏窗口 编辑:程序博客网 时间:2024/06/05 21:20

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

#define _CRT_SECURE_NO_WARNINGS 1#pragma once#include<iostream>#include <assert.h>using namespace std;struct Node {    int elem;    Node* next;};void PushBack(Node**LA, int data){    assert(LA);    Node* temp = new Node;    temp->elem = data;    temp->next = NULL;    if ((*LA) == NULL)    {        *LA = temp;    }    else    {        Node* pCur = *LA;        while (pCur->next)        {            pCur = pCur->next;        }        pCur->next = temp;    }}void Difference(Node** LA , Node* LB){    Node *pre, *pa, *pb, *q;    pre = NULL; //    pa = *LA;  //指向A集合元素    while (pa)    {        pb = LB;  //指向B集合的元素        while (pb && pa->elem!=pb->elem)  //直到B集合元素和pa指向元素相等或者B集合遍历完        {            pb = pb->next;        }        if (pb)  //找到相同的元素        {            if (pre == NULL) //A集合第一个元素需要删除                *LA = (*LA)->next;            else                pre->next = pa->next;            q = pa;            pa = pa->next;            free(q);        }        else        {            pre = pa;            pa = pa->next;        }    }}
阅读全文
0 0