您的位置:首页 > 其它

集合的合并

2014-05-07 16:56 99 查看
上次老师布置的作业没交,保存在这里,以后看。。

代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxNum=20;
class Set
{
private:
    int size;
    int *elems;
    int num;
public:
    Set(int sz=maxNum)
    {
        num=0;
        size=sz;
        elems=new int[size];
    }
    ~Set()
    {
        delete []elems;
    }
    bool IsMember(int x)
    {
        for(int i=1;i<=num;i++)
            if(elems[i]==x)
             return true;
        return false;
    }

    bool AddElement(int x)
    {
        if(IsMember(x))  return true;
        else
        {
            elems[++num]=x;
            return true;
        }
        return false;
    }

    int Union(Set &s1,Set &s2)
    {
        if(size<(s1.num+s2.num))
        {
            size=s1.num+s2.num;
            delete []elems;
            elems=new int[size];
        }
       for(int i=1;i<=s1.num;i++)
           elems[++num]=s1.elems[i];
       for(int i=1;i<=s2.num;i++)
       {
           if(!IsMember(s2.elems[i]))
             elems[++num]=s2.elems[i];
       }
    }
    void sort()
    {
        int tmp;
        for(int i=0;i<num-1;i++)
            for(int j=1;j<=num-i-1;j++)
        {
            if(elems[j]>elems[j+1])
            {
                tmp=elems[j];
                elems[j]=elems[j+1];
                elems[j+1]=tmp;
            }
        }
    }
    void show()
    {
        for(int i=1;i<=num;i++)
            cout<<elems[i]<<ends;
        cout<<endl;
    }
};

int main()
{
    int i,a;
    Set s1,s2,s3;
    int n1,n2;
    cin>>n1;
     for(i=1;i<=n1;i++)
     {
         scanf("%d",&a);
         s1.AddElement(a);
     }
     cin>>n2;
     for(i=1;i<=n2;i++)
     {
         scanf("%d",&a);
         s2.AddElement(a);
     }
     s3.Union(s1,s2);
     s3.sort();
     cout<<"s1 union s2=";
     s3.show();
}
/*
10
10 9 8 7 6 5  4 3 2 1
12
10 11 12 13 14 15 16 17 18 19 20 21
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: