日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

集合的并交差运算

發布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 集合的并交差运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總時間限制:1000ms 內存限制: 65536kB

描述

有兩個整數集合A和B,現在要求實現集合的并、交、差運算。例如A={2,7,9} ,B={3,7,12,2},則集合的并C=A∪B={2,7,9,3,12},而集合的交 C=A∩B={2,7},集合的差C=A-B={9}。集合A和B中元素個數在1~100之間。要求設計一個集合類,集合類實現集合的并交差運算。

輸入

三行

第一行分別為集合A,B的個數
第二行為A集合的數據
第三行為B集合的數據

輸出

三行<
第一行集合并的結果:C的個數及C中的元素
第二行集合交的結果:C的個數及C中的元素
第三行集合差的結果:C的個數及C中的元素

樣例輸入

3 4
2 7 9
3 7 12 2

樣例輸出

5 2 7 9 3 12
2 2 7
1 9


ac代碼

/*
@File     :   set.cpp
@Time     :   2020/03/24
@Desc     :   集合的并交差運算
*/
#include <iostream>
#include <stdlib.h>

using namespace std;
//集合結點
typedef struct Node
{
    int data;
    Node *next;
}*Set;
/**
 * @brief 初始化一個結點
 */
void InitNode(Node *&node);
/**
 * @brief 為node寫入數據
 */
void ReadDataForNode(Node *&node, int data);
/**
 * @brief 向set后插入一個元素
 */
void InsertNode(Set &set, Node *node);
/**
 * @brief 查找集合中是否存在給定元素
 */
bool Find(const Node *node, const Set set);
/**
 * @brief 生成集合
 */
void CreatSet(Set &set, const int size);
/**
 * @brief 打印集合
 */
void PrintSet(const Set set);
/**
 * @brief 復制集合
 */
Set CopySet(const Set set);
/**
 * @brief 兩個集合并
 */
Set Add(const Set A, const Set B, int &size);
/**
 * @brief 兩個集合差
 */
Set Sub(const Set A, const Set B, int &size);
/**
 * @brief 兩個集合交
 */
Set Mul(const Set A, const Set B, int &size);

int main(int argc, char const *argv[])
{
    int size_a, size_b, size_c = 0;
    Set A, B, C;
    cin >> size_a >>size_b;
    CreatSet(A,size_a);
    CreatSet(B,size_b);
    size_c = size_a;
    C= Add(A,B,size_c);
    cout << size_c << " "; PrintSet(C);
    size_c = 0;
    C= Mul(A,B,size_c);
    cout << size_c << " "; PrintSet(C);
    size_c = 0;
    C= Sub(A,B,size_c);
    cout << size_c << " "; PrintSet(C);
    system("pause");
    return 0;
}
void InitNode(Node *&node)
{
    node = (Node*)malloc(sizeof(Node));
    node->next = NULL;
}
void ReadDataForNode(Node *&node, int data)
{
    node->data = data;
}
void InsertNode(Set &set, Node *node)
{   
    Node *node_;
    for (node_ = set; node_->next ; node_ = node_ ->next);
    node_->next = node;
}
bool Find(const Node *node, const Set set)
{
    for (Set node_ = set->next; node_ ; node_ = node_->next)
        if (node->data == node_->data) return true;
    return false;
}
void CreatSet(Set &set, const int size)
{
    int data;
    Node *node;
    InitNode(set);
    for (int i = 0; i < size; i++) {
        cin >> data;
        InitNode(node);
        node->data = data;
        InsertNode(set,node);
    } 
}
void PrintSet(const Set set)
{
    for (Set node = set->next; node ; node = node->next)
        cout << node->data <<" ";
        cout << endl;
}
Set CopySet(const Set set)
{
    Set C, n;
    InitNode(C);
    for (Node* node = set->next; node; node = node->next) {
        InitNode(n);
        n->data = node->data;
        InsertNode(C,n);
    } 
    return C;
}
Set Add(const Set A, const Set B, int &size)
{
    Set C = CopySet(A);
    Node *n;
    for (Set node = B->next; node ; node = node->next) {
           if (!Find(node,A)) {
              InitNode(n);
              n->data = node->data;         //直接insert node會弄臟B地址
              InsertNode(C,n);
              size++;
           }
    }
    return C;
}
Set Sub(const Set A, const Set B, int &size)
{
    Set C, n;
    InitNode(C);
    for (Set node = A->next; node; node = node->next) {
        if (!Find(node,B)) {
            InitNode(n);
            n->data = node->data;
            InsertNode(C,n);
            size++;
        }
    }
    return C;
}
Set Mul(const Set A, const Set B, int &size)
{
    Set C, n;
    InitNode(C);
    for (Set node = A->next; node; node = node->next) {
        if (Find(node,B)) {
            InitNode(n);
            n->data = node->data;
            InsertNode(C,n);
            size++;
        }
    }
    return C;
}

總結

以上是生活随笔為你收集整理的集合的并交差运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。