您的位置:首页 > 编程语言 > C语言/C++

集合的模拟实现(函数模板)

2015-06-29 17:12 525 查看
我们可以用一个数组来模拟集合,add运算用以实现集合元素的增加,delete运算用于实现集合元素的删除,find运算用以实现集合元素的查找,但是目前集合元素类型未知,可以是int、char、double等基本数据类型,也可以是String、Time、Student等对象类型,要求采用模板函数实现集合元素的增加、删除和查找功能。

三个模板函数如下:

int addSet(T * myset, T elem, int len)

int deleSet(T * myset, T elem, int len)

int findElem(T * myset, T elem, int len)

其中,addSet向集合中添加一个元素,deleSet从集合中删除一个元素,findElem判断elem是否是集合成员,三个函数分别返回元素插入位置,删除位置和存在位置。

主函数有如下数据成员 :

int intSet [ 100 ]

double douSet [ 100 ]

string strSet [ 100 ] 分别是int类型、double类型、string的数组集合。

int intLen,douLen,strLen分别是int类型、double类型、string的数组集合的长度

完成上述函数模板和主函数,主函数根据输入的信息,建立初始的空集合,调用三个模板函数分别对intSet、douSet和strSet执行相应的操作,并输出对应的集合信息。

输入格式:

每一行为一个集合操作,每行的第一个数字为集合元素类型,1为整型元素,2为浮点型元素,3为string类型,第二个数字为集合操作类型,1为插入,2为删除,3为查找,第三个为集合元素,集合元素类型视第一个数字给定的集合元素类型而定。输入0时标志输入结束。

输出格式:

输出当前操作的执行位置(插入位置、删除位置和存在位置)

删除操作时,如果元素X不存在,输出“X is not exist!”。

插入操作时,如果集合已满,输出“Full Set.”若元素已存在,输出“X is already exist!”

查找操作时,如果找不到元素,输出“X is not exist!”。

输入:

1 1 1

1 1 2

1 3 1

1 2 1

1 2 3

1 3 1

2 1 1.1

2 1 2.2

2 1 3.3

2 3 1.1

2 2 2.2

2 2 2.2

3 1 abc

3 1 bcd

3 3 abc

3 2 abc

3 3 abc

0

输出:

0

1

0

0

3 is not exist!

1 is not exist!

0

1

2

0

1

2.2 is not exist!

0

1

0

0

abc is not exist!

******************************************************************************************************************************************

#include<iostream>

using namespace std;

template<typename number>

int add(number set[],number n,int size)

{

    int i,flag=0;

    for(i=0;i<size;i++)

    {

        if(set[i]==n)   

        {

            cout<<n<<" is already exist!"<<endl;

            flag=1;

            break;

        }

    }

    if(i==100)   cout<<"Full Set."<<endl;

    else  if(flag==0)   

    {

        size++;

        set[i]=n;

        cout<<i<<endl;

    }

    return size;

}

template<typename number>

int deleted(number set[],number n,int size)

{

    int i,flag=0,j;

    for(i=0;i<size;i++)

    {

        if(set[i]==n)

        {

            flag=1;

            cout<<i<<endl;

            break;

        }

    }

    if(flag)

    {

        size--;

        for(j=i;j<size;j++)

        {

            set[j]=set[j+1];

        }

    }

    else cout<<n<<" is not exist!"<<endl;

    return size;

}

template<typename number>

void find(number set[],number n,int size)

{

    int i,flag=0;

    for(i=0;i<size;i++)

    {

        if(set[i]==n)

        {

            cout<<i<<endl;

            flag=1;

            break;

        }

    }

    if(flag==0)   cout<<n<<" is not exist!"<<endl;

}

int main()

{

    int s1[100];

    string s3[100];

    double  s2[100];

    int flag,a,x,y,z;

    x=y=z=0;

    cin>>flag;

    while(flag!=0)

    {

        switch(flag)

        {

            case 1: {

                       int b;

                       cin>>a>>b;

                       switch(a)

                        {

                           case 1:x=add(s1,b,x);break;

                           case 2:x=deleted(s1,b,x);break;

                           case 3:find(s1,b,x);break;

                        }

                       break;

                    }

            case 2: {

                       double b;

                       cin>>a>>b;

                       switch(a)

                        {

                           case 1:y=add(s2,b,y);break;

                           case 2:y=deleted(s2,b,y);break;

                           case 3:find(s2,b,y);break;

                        }

                       break;

                    }

            case 3: {

                       string b;

                       cin>>a>>b;

                       switch(a)

                        {

                           case 1:z=add(s3,b,z);break;

                           case 2:z=deleted(s3,b,z);break;

                           case 3:find(s3,b,z);break;

                        }

                       break;

                    }

        }

        cin>>flag;

    }

    return 0;

}

****************************************************************************************************************

刚开始的时候deleted 函数忘记return了。。。。。_(:зゝ∠)_找了好久。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数模板 C++