集合的模擬實現(類模板)
我們可以用一個類來模擬集合及集合運算,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
什麼時候我才能記得要及時貼程式碼==!
說好的每天呢( ̄┰ ̄*)