• c++ 实验二(1)


    1、  实现一个整数集合类,集合类中元素的个数可变。集合类可存储的元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。该类还实现了集合元素的增添、删除、复制、查找、显示及求集合的交集。阅读并理解下面的程序,完成求集合的并集函数。

    #include<iostream>
    using namespace std;
    const int maxNum = 20; //集合中允许容纳的元素的默认最大值

    class Set
    {
    private:
    int size; //集合中允许容纳的元素的最大个数
    int *elems; //存储元素的数组
    int num; //集合中元素的个数
    public:
    Set(int sz=maxNum);
    ~Set();
    bool IsMember(int); //判断是否为集合的元素
    bool AddElement(int); //添加元素
    void RemoveElement(int); //删除元素
    void Copy(Set &); //集合复制
    void Show(); //显示集合中元素
    void Intersect(Set &,Set &); //求集合的交集// 本类对象做成员函数的形参一定要用引用!
    void Union(Set &,Set &); //求集合的并集
    };
    //类Set的实现
    inline Set::Set(int sz)
    {
    num=0;
    size=sz;
    elems=new int[size];
    }

    inline Set::~Set()
    {
    num=0;
    size=0;
    delete []elems;
    }

    bool Set::IsMember(int e)
    {
    for (int i=0; i<num; i++)
    if (elems[i]==e) return true;
    return false;
    }

    bool Set::AddElement(int elem)
    {
    if (IsMember(elem)) return true;
    if (num<size)
    {
    elems[num++] = elem;
    return true;
    }
    return false;
    }

    void Set::RemoveElement(int c)
    {
    int index=-1;
    for (int i=0; i<num; i++)
    if (elems[i]==c)
    {
    index =i;
    break;
    }
    if (index!=-1)
    {
    for (int i=index; i<num-1; i++)
    elems[i] = elems[i+1];
    num --;
    }
    }

    void Set::Copy(Set &s) //复制构造
    {
    if (size<s.size)
    {
    delete []elems;
    elems = new int[s.size];
    size = s.size;
    }
    for (int i=0; i<s.num; i++) elems[i] = s.elems[i];
    num = s.num;
    }

    void Set::Show()
    {
    cout<<"{";
    for (int i=0; i<num-1; i++) cout<<elems[i]<<",";
    if (num>0) cout<<elems[num-1];
    cout<<"}"<<endl;
    }

    void Set::Intersect(Set &s1, Set &s2)
    {
    if (size<s1.size)
    {
    delete []elems;
    elems=new int[s1.size];
    size=s1.size;
    }
    num=0;

    for (int i=0; i<s1.num; i++)
    if (s2.IsMember(s1.elems[i])) elems[num++] = s1.elems[i];
    }

    void Set::Union(Set &s1,Set &s2) //求集合的并集(填写代码,实现其功能)
    {int flag=1,i;
    if(s2.num>s1.num) flag=2;
    if(flag=1)
    {
    for(i=0;i<s1.num;i++)
    {
    elems[i]=s1.elems[i];
    num++;
    }
    for(i=0;i<s2.num;i++)
    {
    AddElement(s2.elems[i]);
    }
    }
    else
    {
    for(i=0;i<s1.num;i++)
    {
    elems[i]=s1.elems[i];
    }
    for(i=0;i<s1.num;i++)
    {
    AddElement(s1.elems[i]);
    }
    }
    }

    //测试
    int main()
    {
    Set s1,s2,s3;
    int i;
    for (i=0; i<5; i++) s1.AddElement(2*i);
    for (i=0; i<5; i++) s2.AddElement(3*i);
    cout<<"s1="; s1.Show();
    cout<<"s2="; s2.Show();

    s2.RemoveElement(9);
    cout<<"s2-{9}="; s2.Show();

    if (s1.IsMember(2)) cout<<"2 is in s1 ";
    else cout<<"2 is not in s1 ";

    s3.Intersect(s1,s2);
    cout<<"s1 intsec s2="; s3.Show();
    s3.Union(s1,s2);
    cout<<"s1 union s2="; s3.Show();

    return 0;
    }

  • 相关阅读:
    dlib库+vs2017详细配置流程
    【网易云课堂】【中科院团队】深度学习:算法到实战——神经网络基础
    【网易云课堂】【中科院团队】深度学习:算法到实战——绪论
    matlab 读取多行txt文本
    LeetCode 228. Summary Ranges【未加入列表】
    LeetCode 438. Find All Anagrams in a String
    c++冷知识
    python项目实战——西游记用字统计
    LeetCode 101. Symmetric Tree
    LeetCode 63. Unique Paths II
  • 原文地址:https://www.cnblogs.com/cy846586184/p/12930810.html
Copyright © 2020-2023  润新知