Page 299 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 299
차집합을 구하는 방법
집합 s1과 s2의 차집합은 보수 연산자 ~와 비트 단위의 논리곱 연산자 &를 조합해 구할 수 있
습니다.
s1 & ~s2 /* 집합 s1과 집합 s2의 차집합 */
a 집합 {1, 3, 5, 6}에서 {1, 3, 4}를 뺍니다. b 집합 {1, 3, 5, 6}에서 {2, 4, 7}을 뺍니다.
31 30 9 8 7 6 5 4 3 2 1 0 31 30 9 8 7 6 5 4 3 2 1 0
s1 0 0 0 0 0 1 1 0 1 0 1 0 s1 0 0 0 0 0 1 1 0 1 0 1 0
~s2 1 1 1 1 1 1 1 0 0 1 0 1 ~s2 1 1 1 1 0 1 1 0 1 0 1 1
& &
0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0
차집합 {5, 6}을 얻었습니다. 차집합 {1, 3, 5, 6}을 얻었습니다.
[그림 7-20] 두 집합의 차집합을 구하는 과정
실습 7-7은 두 집합 s1과 s2을 사용해 대화형으로 다양한 집합 연산을 수행하는 프로그램입
니다. 이 프로그램의 컴파일에는 BitSet.h, BitSet.c가 필요합니다.
실습 7-7 •완성 파일 chap07/BitSetTest.c
01 /* 비트 벡터로 정수 집합 표현 */
02 #include <stdio.h>
03 #include "BitSet.h"
04
05 enum { ADD, RMV, SCH };
06
07 /*--- 데이터 입력 ---*/
08 int scan_data(int sw)
09 {
10 int data;
11 switch(sw) {
12 case ADD : printf("추가할 데이터 : "); break;
13 case RMV : printf("삭제할 데이터 : "); break;
14 case SCH : printf("검색할 데이터 : "); break;
15 }
16 scanf("%d", &data);
17 return data;
07•집합 299