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 알고리즘
   275   276   277   278   279   280   281   282   283   284   285