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

두 집합의 교집합을 구하는 Intersection 함수

                   Intersection 함수는 집합 s2, s3의 교집합을 s1에 대입하는 함수입니다. 먼저 s1을 공집합으
                   로 초기화합니다. 이때 집합 s2의 모든 원소를  스캔하면서 s2의 원소가 s3에 있다면 s1에 추
                   가합니다. 스캔이 끝나면 s1에는 교집합의 원소가 포함되고, s1의 포인터를 반환합니다.



                   두 집합의 차집합을 구하는 Difference 함수
                   Difference 함수는 집합 s2, s3의 차집합을 s1에 대입하는 함수입니다. 먼저 s1을 공집합으로
                   초기화합니다. 이때 집합 s2의 모든 원소를 스캔하면서 s2의 원소가 s3에 있다면 s1에 추가합

                   니다. 이 역시도 스캔이 끝나면 s1에는 차집합의 원소가 포함되고, s1의 포인터를 반환합니다.


                   집합의 모든 원소를 출력하는 Print와 PrintLn 함수
                   Print, PrintLn 함수는 집합의 모든 원소를 출력하는 함수입니다. 예를 들어, 집합 s = {1, 5,

                   7}인 경우 ‘{1 5 7}’이라고 출력합니다. 두 함수의 차이는 줄 바꿈 문자의 포함 여부입니다.


                   메모리를 정리하고 종료하는 Terminate 함수

                   Terminate 함수는 모든 과정을 정리하는 함수입니다.


                             Q1  실습 7-2 프로그램에 다음 8개의 함수를 추가하세요.
                    연습
                    문제
                             /* 집합이 가득 찼다면 1, 아니면 0을 반환 */
                             int IsFull(const IntSet *s);


                             /* 집합의 모든 원소를 삭제하는 함수 */
                             void Clear(IntSet *s);


                             /* 집합 s2, s3의 대칭 차를 s1에 대입하는 함수 */
                             IntSet *symmetricDifference(IntSet *s1, const IntSet *s2, const IntSet *s3);

                             /* 집합 s1에 s2의 모든 원소를 추가하는 함수(s1 포인터 반환) */
                             IntSet *ToUnion(IntSet *s1, const IntSet *s2);


                             /* 집합 s1에서 s2에 들어 있지 않은 모든 원소를 삭제하는 함수(s1 포인터 반환) */
                             IntSet *ToIntersection(IntSet *s1, const IntSet *s2);


                             /* 집합 s1에서 s2에 들어 있는 모든 원소를 삭제하는 함수(s1 포인터 반환) */
                             IntSet *ToDifference(IntSet *s1, const IntSet *s2);




                   286   C 알고리즘
   281   282   283   284   285   286   287   288   289   290   291