O mulţime de numere întregi poate fi reprezentată astfel: spunem că un număr i aparţine unei mulţimi S dacă bit-ul al i-lea din vectorul S are valoarea 1. Pentru eficientă, vectorul S va conţine date de tipul unsigned char. Implementati funcţii pentru:
- adăugarea unui element în mulţime;
- ştergerea unui element din mulţime;
- ştergerea tuturor elementelor din mulţime;
- verificare dacă mulţimea este vidă;
- cardinalul mulţimii.
Realizaţi un program care, utilizând funcțiile definite anterior, citeşte 2 mulţimi A şi B şi afişează: AuB (reuniune), AnB (intersectie), A – B si B – A.
Exemplu de cod:
#define SET_SIZE 10 //definim tipul SET ca fiind un vector de SET_SIZE octeti: typedef unsigned char SET[SET_SIZE]; //in multime vor putea fi memorate SET_SIZE * 8 numere const unsigned int SET_LENGTH = SET_SIZE * 8; //verifica daca un numar n apartine multimii S: int apartine(SET S, unsigned int n) { static unsigned int MASK = 0x80; //1000 0000 //daca n poate fi marcat si daca bit-ul al n-lea este 1 return (n < SET_LENGTH) && ( S[n/8] & (MASK >> (n%8)) ); }