Page 280 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 280
11 if((s->set = calloc(max, sizeof(int))) == NULL) {
12 s->max = 0; /* 배열 생성에 실패 */
13 return -1;
14 }
15 s->max = max;
16 return 0;
17 }
18
19 /*--- 집합 s에 n이 들어 있는지 확인 ---*/
20 int IsMember (const IntSet *s, int n)
21 {
22 int i;
23 for(i = 0; i < s->num; i++)
24 if(s->set[i] == n)
25 return i; /* 들어 있음(인덱스를 반환) */
26 return –1; /* 들어 있지 않음 */
27 }
28
29 /*--- 집합 s에 n을 추가 ---*/
30 void Add(IntSet *s, int n)
31 {
32 if(s->num < s->max && IsMember(s, n) == -1) /* 들어 있지 않으면 */
33 s->set[s->num++] = n; /* 배열 끝에 n을 추가 */
34 }
35
36 /*--- 집합 s에서 n을 삭제 ---*/
37 void Remove (IntSet *s, int n)
38 {
39 int idx;
40 if((idx = IsMember(s, n)) != -1) {
41 s->set[idx] = s->set[--s->num]; /* 마지막 요소를 삭제 위치로 옮김 */
42 }
43 }
44 (실습 7-2[B]에서 계속)
배열을 초기화하는 Initialize 함수
Initialize 함수는 집합을 표현할 배열을 만드는 등의 준비 작업을 수행합니다. 초기 상태의 집합
은 공집합(데이터가 하나도 없는 상태)이므로 num의 값을 0으로 합니다. 그리고 요소의 최대 개수
가 max개인 배열 본체(set)를 만들고 매개변수 max로 전달받은 값을 멤버 max에 복사합니다.
280 C 알고리즘