PTA:7-86 集合的模拟实现(函数模板)

我们可以用一个数组来模拟集合,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<class T>
int findElem(T * myset, T elem,int len)
{
	int i;
	for(i=0;i<len;i++)
	{
		if(myset[i]==elem)
		return i;
	}
	return -1;
}
template<class T>
int addSet(T * myset, T elem,int len)
{
	if(len==100)//集合满了 
	{
		return 101;
	}
	if(findElem(myset,elem,len)>=0)//元素已经存在 
	{
		return -1;
	}
//	int i=0;
//	for(int j=0;j<len;j++)
//	{
//		if(myset[j]<elem)
//		i=j;
//	}
//	for(int j=len;j>i;j--)
//	{
//		myset[j]=myset[j-1];
//	}
	myset[len]=elem;
	return len;
}
template<class T>
int deleSet(T * myset, T elem,int len)
{
	if(findElem(myset,elem,len)<0)//元素不存在 
	{
		return -1;
	}
	int i=findElem(myset,elem,len);
	for(int j=i;j<len-1;j++)
	{
		myset[j]=myset[j+1];
	}
	return i;
}
int main()
{
	int intSet[100];
	double douSet[100];
	string strSet[100];
	int intLen=0, douLen=0, strLen=0;
	int type1,type2,elementi,k;
	double elementd;
	string elements;
	cin>>type1;
	while(type1!=0)
	{
		switch(type1)
		{
			case 1:
				cin>>type2>>elementi;
				switch(type2)
				{
					case 1:
						k=addSet(intSet,elementi,intLen);
						if(k==101)
							cout<<"Full Set."<<endl;
						else if(k==-1)
							cout<<elementi<<" is already exist!"<<endl;
						else
						{
							cout<<k<<endl;
							intLen++;
						}	
						break;
					case 2:
						k=deleSet(intSet,elementi,intLen);
						if(k==-1)
							cout<<elementi<<" is not exist!"<<endl;
						else 
						{
							cout<<k<<endl;
							intLen--;
						}
						break;
					case 3:
						k=findElem(intSet,elementi,intLen);
						if(k<0)
						cout<<elementi<<" is not exist!"<<endl;
						else
						cout<<k<<endl;
						break;
				}
				break;
			case 2:
				cin>>type2>>elementd;
				switch(type2)
				{
					case 1:
						k=addSet(douSet,elementd,douLen);
						if(k==101)
							cout<<"Full Set."<<endl;
						else if(k==-1)
							cout<<elementd<<" is already exist!"<<endl;
						else
						{
							cout<<k<<endl;
							douLen++;
						}	
						break;
					case 2:
						k=deleSet(douSet,elementd,douLen);
						if(k==-1)
							cout<<elementd<<" is not exist!"<<endl;
						else 
						{
							cout<<k<<endl;
							douLen--;
						}
						break;
					case 3:
						k=findElem(douSet,elementd,douLen);
						if(k<0)
						cout<<elementd<<" is not exist!"<<endl;
						else
						cout<<k<<endl;
						break;
				}
				break;
			case 3:
				cin>>type2>>elements;
				switch(type2)
				{
					case 1:
						k=addSet(strSet,elements,strLen);
						if(k==101)
							cout<<"Full Set."<<endl;
						else if(k==-1)
							cout<<elements<<" is already exist!"<<endl;
						else
						{
							cout<<k<<endl;
							strLen++;
						}	
						break;
					case 2:
						k=deleSet(strSet,elements,strLen);
						if(k==-1)
							cout<<elements<<" is not exist!"<<endl;
						else 
						{
							cout<<k<<endl;
							strLen--;
						}
						break;
					case 3:
						k=findElem(strSet,elements,strLen);
						if(k<0)
						cout<<elements<<" is not exist!"<<endl;
						else
						cout<<k<<endl;
						break;
				}
		}
		cin>>type1;
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值