Gia sư Cần Thơ, Dạy Kèm Cần Thơ

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG


Tập hợp - Cài đặt bằng mảng theo dạng Vecto Bit

Share

admin
Admin
Admin

Tổng số bài gửi : 1207
Points : 3010
Join date : 11/11/2009
Age : 35
Đến từ : Cần Thơ

Tập hợp - Cài đặt bằng mảng theo dạng Vecto Bit

Bài gửi  admin on Wed May 05, 2010 8:59 am

CÀI ĐẶT TẬP HỢP BẰNG MẢNG


Cấu trúc dữ liệu
Code:
#define MaxLength 100
typedef char Set[MaxLength];

Khởi tạo tập hợp rỗng
Code:
void MakeNull(Set A) {
   for(int i=0; i<MaxLength; i++)
      A[i]=0;
}

Phép toán hợp (C = A hợp B)
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;
}

Phép toán giao (C = A giao B)
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;
}

Phép toán hiệu (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];
}

Hàm kiểm tra thành viên
Code:
char Member(int x, Set A) {
   return A[x]==1;
}

Thêm phần tử x vào tập hợp A
Code:
void Insert(int x, Set A) {
   A[x] = 1;
}

Xóa phần tử x trong tập hợp A
Code:
void Delete(int x, Set A) {
   A[x] = 0;
}

Cho hai tập hợp bằng nhau
Code:
void Assign( Set A, Set B) {
   for (int i=0; i<MaxLength; i++)
      B[i] = A[i];
}

Tìm phần tử nhỏ nhất trong tập hợp
Code:
int Min(Set A){
   int i = 0, Found = -1;
   while(i<MaxLength && Found ==-1)
      if(A[i]==1)
         Found = i;
      else
         i++;
   return Found;
}

Hàm kiểm tra hai tập hợp bằng nhau
Code:
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;
}

Nhập một tập hợp từ bàn phím
Code:
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);
}

Xuất tập hợp ra màn hình
Code:
void Write(Set A) {
   for (int i=0; i<MaxLength; i++)
   if(A[i]==1)
      printf("%3d",i);
}

admin
Admin
Admin

Tổng số bài gửi : 1207
Points : 3010
Join date : 11/11/2009
Age : 35
Đến từ : Cần Thơ

Chương trình mẫu

Bài gửi  admin on Wed May 05, 2010 9:01 am

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];
}
//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();
}

    Hôm nay: Sun Dec 04, 2016 1:04 pm