Page 296 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 296
16 /*--- 집합 s의 모든 원소를 출력 ---*/
17 void Print (BitSet s)
18 {
19 int i;
20 printf("{ ");
21 for(i = 0; i < BitSetBits; i++)
22 if(IsMember(s, i))
23 printf("%d ", i);
24 printf("}");
25 }
26
27 /*--- 집합 s의 모든 원소를 출력(줄 바꿈 문자 포함) ---*/
28 void PrintLn (BitSet s)
29 {
30 Print(s);
31 putchar( '\n');
32 }
원소를 삭제하는 Remove 함수
Remove 함수는 집합 s에서 n을 삭제하는 함수입니다. 그림 7-16은 삭제하는 과정을 나타
낸 예입니다. 집합 s의 비트 벡터와 SetOf(n)으로 얻은 비트 벡터의 보수로 논리곱 연산을 하
면 n이 삭제됩니다.
a 집합 {1, 3, 5, 6}에서 5를 삭제합니다. b 집합 {1, 3, 5, 6}에서 4를 삭제합니다.
31 30 9 8 7 6 5 4 3 2 1 0 31 30 9 8 7 6 5 4 3 2 1 0
s 0 0 0 0 0 1 1 0 1 0 1 0 s 0 0 0 0 0 1 1 0 1 0 1 0
~SetOf(n) 1 1 1 1 1 1 0 1 1 1 1 1 ~SetOf(n) 1 1 1 1 1 1 1 0 1 1 1 1
& &
0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0
이 비트의 값만 0으로 바뀝니다. 이 비트의 값은 바뀌지 않습니다.
집합에서 n이 삭제되었습니다. n 값이 없기 때문에 집합의 변화가 없습니다.
[그림 7-16] Remove 함수로 원소를 삭제하는 과정
집합의 원소 개수를 반환하는 Size 함수
Size 함수는 원소의 개수를 반환하는 함수입니다. 집합의 원소 개수는 비트 벡터 안의 ‘1’인
비트가 몇 개인지 알아내면 됩니다. 다음은 집합의 원소 개수를 세는 과정입니다.
296 C 알고리즘