#ifndef SET_H
#define SET_H
#include <stdio.h>
#include <limits.h>
class Set
{
int elementNum;
int* pData;
public:
// Üres halmazt inicializál.
Set()
{
elementNum=0;
pData=NULL;
}
// Egy másik halmaz adatai alapján inicializál. Másoljuk a dinamikus adattagokat is!
Set(Set &theOther)
{
int i;
elementNum=theOther.elementNum;
delete[] pData;
pData=new int [elementNum];
for(i=0;i<elementNum;i++)
{
pData[i]=theOther.pData[i];
}
}
// Destruktor: felszabadítja a dinamikus adattagokat.
~Set() {delete[] pData;}
// Beszúr egy elemet a halmazba. Ha a halmaz megtelt hamissal tér vissza.
// Ha már bent van az elem a halmazba, akkor nem adja hozzá mégegyszer,
// de igazzal tér vissza, hiszen hiba nem történt, benne van az elem a halmazban.
bool insert(int element)
{
int i;
Set theOther;
if(elementNum==INT_MAX) return false;
if(isElement(element)==false)
{
for(i=0;i<elementNum;i++) theOther.pData[i]=pData[i];
elementNum++;
delete[] pData;
pData=new int[elementNum];
for(i=0;i<elementNum-1;i++) pData[i]=theOther.pData[i];
pData[elementNum]=element;
return true;
}
else return true;
}
// Eltávolít egy adott elemet a halmazból. Pl. kiveszi az 5-öt a halmazból.
// Ha nincs benne az elem a halmazban, hibával tér vissza.
bool remove(int element)
{
int i,j;
if(isElement(element)==false) return false;
else
{
for(j=0;j<elementNum;j++)
if(pData[j]==element) break;
for(i=j+1;i<elementNum;i++)
pData[i-1]=pData[i];
Set theOther;
elementNum--;
for(i=0;i<elementNum;i++) theOther.pData[i]=pData[i];
pData=theOther.pData;
delete[] theOther.pData;
return true;
}
}
// Megnézi, hogy egy elem benne van-e a halmazban. Ha igen, igazzal tér vissza, amúgy hamissal.
bool isElement(int element)
{
int i;
for(i=0;i<elementNum;i++)
{
if(pData[i]==element) return true;
}
return false;
}
// Kiüríti a halmazt.
void empty()
{
delete[] pData;
elementNum=0;
}
// Kiírja a halmaz elemeit szóközzel elválasztva. Az elso és az utolsó elem után soremelést rak.
void print()
{
for(int i=0;i<elementNum;i++) printf("%d ", pData[i]);
}
};
#endif /* SET_H */