Page 284 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 284

수는 다음과 같이 구할 수 있습니다.


                     int n = (Capacity(s1) < size(s2)) ? Capacity(s1) : Size(s2);



                   두 집합이 같은지 조사하는 Equal 함수
                   Equal 함수는 s1과 s2가 같은지 판단하는 함수입니다. 같으면 1을 반환하고 같지 않으면 0을

                   반환합니다. Equal 함수는 다음과 같이 구현합니다.


                     1.   원소 개수가 같지 않은 경우
                       두 집합은 같지 않은 것으로 판단하고 0을 반환합니다.

                     2.     원소 개수가 같은 경우
                       i가 1씩 증가하며 집합 s1의 원소(s1->set[i])가 집합 s2에 들어 있는지 조사합니다. 원소가 발견되지
                       않으면 두 집합은 서로 같지 않은 것으로 판단합니다. 실습 7-2[B]에 초록색 박스로 표시한 부분을 보면
                       break문으로 안쪽의 for문을 멈추고 0을 반환합니다. for문이 중단되지 않고 끝나면 두 집합은 서로 같은
                       것으로 판단하고 1을 반환합니다.



                   두 집합의 합집합을 구하는 Union 함수

                   Union 함수는 집합 s2, s3의 합집합을 구해 s1에 대입하는 함수입니다. 먼저 Assign 함수로
                   집합 s2를 s1에 복사한 다음 s3의 모든 원소를   하나씩 s1에 추가합니다. 이렇게 하면 s1에 s2,
                   s3의 합집합이 대입됩니다. Union 함수는 s1의 포인터를 반환합니다.


                     실습 7-2[C]                                                •완성 파일 chap07/IntSet.c

                     01  /*--- 집합 s2와 s3의 교집합을 s1에 대입 ---*/
                     02  IntSet *Intersection (IntSet *s1, const IntSet *s2, const IntSet *s3)
                     03  {
                     04     int i, j;
                     05     s1->num = 0;   /* s1을 공집합으로 만듭니다. */
                     06     for(i = 0; i < s2->num; i++)
                     07       for(j = 0; j < s3->num; j++)
                     08         if(s2->set[i] == s3->set[j])
                     09           Add(s1, s2->set[i]);
                     10     return s1;
                     11  }
                     12
                     13  /*--- 집합 s2에서 s3를 뺀 차집합을 s1에 대입 ---*/
                     14  IntSet *Difference (IntSet *s1, const IntSet *s2, const IntSet *s3)
                     15  {




                   284   C 알고리즘
   279   280   281   282   283   284   285   286   287   288   289