Cài đặt tập hợp bằng vecto Bit

Giao hai tập hợp

Code:

void Intersection(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)&&(B[i]==1))
      C[i] = 1;
   else
      C[i] = 0;
}

Hợp hai tập hợp

Code:

void Union(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)||(B[i]==1))
      C[i] = 1;
   else
      C[i] = 0;
}

Hiệu hai tập hợp c = A\B

Code:

void Difference(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)&&(B[i]==1))
      C[i] = 0;
   else
      C[i] = A[i];
}

CHƯƠNG TRÌNH MẪU

Code:

#include <stdio.h>
#include <conio.h>
#define MaxLength 100
typedef char Set[MaxLength];
//khoi tao tap hop rong
void MakeNull(Set A) {
   for(int i=0; i<MaxLength; i++)
      A[i] = 0;
}
// C = A hop B
void Union(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)||(B[i]==1))
      C[i] = 1;
   else
      C[i] = 0;
}
//C = A giao B
void Intersection(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)&&(B[i]==1))
      C[i] = 1;
   else
      C[i] = 0;
}
//C=A\B
void Difference(Set A, Set B, Set C) {
   for (int i=0; i<MaxLength; i++)
   if ((A[i]==1)&&(B[i]==1))
      C[i] = 0;
   else
      C[i] = A[i];
}
//kiem tra thanh vien
unsigned char Member(int x, Set A) {
   return A[x]==1;
}
//them phan tu x vao tap hop A
void Insert(int x, Set A) {
   A[x] = 1;
}
//xoa phan tu x khoi tap hop A
void Delete(int x, Set A) {
   A[x] = 0;
}
//B = A
void Assign( Set A, Set B) {
   for (int i=0; i<MaxLength; i++)
      B[i] = A[i];
}
//tim phan tu nho nhat trong tap hop
int Min(Set A){
   int i = 0;
   while(i<MaxLength && A[i]==0)
      i++;
   if(i<MaxLength)
      return i;
   else
      return -1;
}
//kiem tra A = B
unsigned char Equal(Set A, Set B) {
   int i = 0, Found = 0;
   while(i<MaxLength && Found == 0)
      if(A[i] != B[i])
         Found = 1;
      else
         i++;
   return Found;
}
//Nhap tap hop
void Read(Set A) {
   int x = 0;
   printf("\nNhap den -1 thi ket thuc: ");
   do {
      scanf("%d",&x);
      if(x!=-1)
         A[x] = 1;
   }while(x!=-1);
}
//Xuat tap hop
void Write(Set A) {
   for (int i=0; i<MaxLength; i++)
   if(A[i]==1)
      printf("%3d",i);
}
//chuong trinh chinh
void main() {
   clrscr();
   Set A, B, C;
   MakeNull(A);
   Read(A);
   printf("Tap hop A:\n");
   Write(A);
   
   MakeNull(B);
   Read(B);
   printf("\nTap hop B:\n");
   Write(B);
   
   MakeNull(C);
   Union(A,B,C);
   printf("\nA hop B:\n");
   Write(C);
   
   MakeNull(C);
   Intersection(A,B,C);
   printf("\nA giao B:\n");
   Write(C);
   
   MakeNull(C);
   Difference(A,B,C);
   printf("\nA\B:\n");
   Write(C);
   
   getch();
}