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


Giao hai tập hợp
Mã:
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
Mã:
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
Mã:
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
Mã:
#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();
}