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

연습
                        문제        /* 집합 s1이 s2의 부분집합이면 1, 아니면 0을 반환 */
                                  int IsSubset(const IntSet *s1, const IntSet *s2);


                                  /* 집합 s1이 s2의 진부분집합이면 1, 아니면 0을 반환 */
                                  int IsProperSubset(const IntSet *s1, const IntSet *s2);



                                 Q2  배열 안의 원소가 항상 오름차순을 유지하는 집합 프로그램을 작성하세요. 원소의 검색은
                                이진 검색 알고리즘을 사용합니다(추가, 삭제도 마찬가지입니다). 또 오름차순을 유지한다는 특
                                징을 이용해 다른 배열과 같은지 확인하는 작업도 좀 더 효율적으로 진행해 보세요. 이때 집합을
                                관리하는 구조체의 이름은 SortedIntSet으로 하세요.
                                    이렇게 프로그램을 만들면 다른 배열과 같은지 확인하는 작업도 효율적으로 할 수 있습니다. 하지만 원소를
                                삽입, 삭제하는 작업의 효율은 떨어집니다.


                        실습 7-3, 7-4는 앞에서 구현한 IntSet를 사용하는 프로그램입니다.
                           이 프로그램의 컴파일에는 IntSet.h, IntSet.c가 필요합니다.



                          실습 7-3                                              •완성 파일 chap07/IntSetTest1.c
                         01  /* int형 집합 IntSet의 사용 예(1) */                         실행 결과
                         02  #include <stdio.h>
                                                                          s1 = { 10 15 20 25 }
                         03  #include "IntSet.h"                          s2 = { 10 15 12 25 }
                         04                                               s3 = { 10 15 12 25 }
                         05  int main (void)                              집합 s1에 15가 들어 있습니다.
                         06  {                                            집합 s2에 25가 들어 있습니다.
                         07    IntSet s1, s2, s3;                         집합 s1과 s2는 서로 같지 않습니다.
                                                                          집합 s2와 s3은 서로 같습니다.
                         08    Initialize(&s1, 24);
                         09    Initialize(&s2, 24);
                         10    Initialize(&s3, 24);
                         11
                         12    Add(&s1, 10);   /* s1 = {10} */
                         13    Add(&s1, 15);   /* s1 = {10, 15} */
                         14    Add(&s1, 20);   /* s1 = {10, 15, 20} */
                         15    Add(&s1, 25);    /* s1 = {10, 15, 20, 25} */
                         16
                         17    Assign(&s2, &s1);    /* s2 = {10, 15, 20, 25} */
                         18    Add(&s2, 12);       /* s2 = {10, 15, 20, 25, 12} */
                         19    Remove(&s2, 20);     /* s2 = {10, 15, 12, 25} */
                         20






                                                                                          07•집합  287
   282   283   284   285   286   287   288   289   290   291   292