集合的模拟实现(类模板)
来源:互联网 发布:linux系统的特点 编辑:程序博客网 时间:2024/05/16 12:12
我们可以用一个类来模拟集合及集合运算,add运算用以实现集合元素的增加,delete运算用于实现集合元素的删除,find运算用以实现集合元素的查找,但是目前集合元素类型未知,可以是int、char、double等基本数据类型,也可以是String、Time、Student等对象类型,要求采用类模板实现集合及集合运算,包括集合元素的增加、删除和查找的等基本功能。
集合模板类MySet包括数据如下:
T data [ 100 ];//用数组来存放所有的集合元素,最多不超过100个元素
int count;//表示目前集合中有多少个元素
包括成员函数如下:
构造函数若干个
集合运算函数如下:
int addSet( T elem)
int deleSet(T elem)
int findElem(T elem)
其中,addSet向集合中添加一个元素,deleSet从集合中删除一个元素,findElem判断elem是否是集合成员,三个函数分别返回元素插入位置,删除位置和存在位置。
主函数有如下数据成员 :
MySet intSet;
MySet douSet;
MySet strSet; 分别是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 unmtype>
class MySet
{
unmtype data[100];
int i;
public:
MySet()
{
i=0;
}
void add(unmtype n);
void deleted(unmtype n);
void find(unmtype n);
};
template<class unmtype>
void MySet<unmtype>::add(unmtype n)
{
int j;
if(i==99) cout<<"Full Set."<<endl;
else
{
if(i==0)
{
cout<<"0"<<endl;
data[i]=n;
i++;
}
else
{
for(j=0;j<i;j++)
{
if(data[j]==n)
{
cout<<n<<" is already exist!"<<endl;
break;
}
}
if(j==i)
{
cout<<j<<endl;
data[j]=n;
i++;
}
}
}
}
template<class unmtype>
void MySet<unmtype>::deleted(unmtype n)
{
int j,k;
if(i==0)
{
cout<<n<<" is not exist!"<<endl;
}
else
{
for(j=0;j<i;j++)
{
if(data[j]==n) break;
}
if(j==i) cout<<n<<" is not exist!"<<endl;
else
{
for(k=j;k<i-1;k++)
{
data[k]=data[k+1];
}
cout<<j<<endl;
i--;
}
}
}
template<class unmtype>
void MySet<unmtype>::find(unmtype n)
{
int j;
if(i==0) cout<<n<<" is not exist!"<<endl;
else
{
for(j=0;j<i;j++)
{
if(data[j]==n)
{
cout<<j<<endl;
break;
}
}
if(j==i) cout<<n<<" is not exist!"<<endl;
}
}
int main()
{
int flag,b;
MySet<int>a;
MySet<float>a2;
MySet<string>a3;
cin>>flag;
while(flag!=0)
{
switch(flag)
{
case 1: {
int c;
cin>>b>>c;
switch(b)
{
case 1:a.add(c);break;
case 2:a.deleted(c);break;
case 3:a.find(c);break;
}
break;
}
case 2:{
float c;
cin>>b>>c;
switch(b)
{
case 1:a2.add(c);break;
case 2:a2.deleted(c);break;
case 3:a2.find(c);break;
}
break;
}
case 3:{
string c;
cin>>b>>c;
switch(b)
{
case 1:a3.add(c);break;
case 2:a3.deleted(c);break;
case 3:a3.find(c);break;
}
break;
}
}
cin>>flag;
}
return 0;
}
*******************************************************************************************************8
什么时候我才能记得要及时贴代码==!
说好的每天呢( ̄┰ ̄*)
- 集合的模拟实现(类模板)
- 集合的模拟实现(函数模板)
- 模板类模拟实现List
- 数据结构——模拟集合的实现(2)
- 简单模拟实现队列Queue的模板类
- set(集合类)模板的使用
- 【c++】模拟实现栈 类模板(Stack的基本操作)
- 【c++模板】模拟实现有模板的双向链表(List)(声明和定义分离)
- 类模板模拟实现STL中Vector
- 类模板模拟实现STL中List
- 模板模拟实现栈
- 模拟share_ptr的实现-02-基于模板的实现
- JavaScript中模拟实现Java的集合类Map的常用方
- 路由模拟——路由算法1的实现(结点集合类)
- 路由模拟——路由算法1的实现(基因集合类)
- 路由模拟——路由算法1的实现(基因集合类)
- 模拟集合的Iterator
- 使用模板类,实现用两个栈模拟队列的功能
- windows 64系统安装Redis
- 经典漫画讲解HDFS原理
- 批处理 BAT
- 通过printf设置Linux终端输出的颜色和显示方式
- 倍增搜索
- 集合的模拟实现(类模板)
- openfire-spark 二次开发-(一)源码配置
- Linux驱动修炼之道-INPUT子系统(下)
- 数据对齐/内存对齐 && 数据格式
- 使用SurfaceView和MediaPlayer实现视频做为背景
- java的collection学习总结
- linux 安装 expect tcl
- Java基础——IO流(上)
- 在Redis-Sentinel的client-reconfig-script脚本中设置VIP