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

인큐 함수 Enque

                        Enque 함수는 큐에 데이터를 인큐하는 함수입니다. 인큐에 성공하면 0을 반환하지만 큐가
                        가득 차서 인큐할 수 없으면(num >= max) -1을 반환합니다. 그림 4-12는 처음부터 차례대로
                        데이터(35, 56, 24, 68, 95, 73, 19)를 넣은 큐에 82를 인큐하는 모습입니다.
                           이 그림에서는 7개의 데이터(35, 56, 24, 68, 95, 73, 19)가 차례로 que[7] que[8], …, que[11] que[0], que[1]에 저
                        장됩니다. 82를 인큐하기 전의 front 값은 7, rear 값은 2입니다.


                        que[rear](que[2])에 데이터 82를 인큐하고 rear와 num 값을 1만큼 증가하면(실습 4-5[B]의
                        1    ) 인큐 작업이 끝납니다. 하지만 생각지 못한 문제가 하나 있습니다. 만약 인큐하기 전의
                        rear 값이 11이면 Enque 함수를 수행한 다음에는 rear 값이 12가 되면서 max(Initialize 함수
                        에서 초기화한 값 12)와 같아지는 문제가 발생합니다.

                           rear 값이 max와 같아지면 실제 배열에는 없는 공간인 que[12]를 가리키게 됩니다.


                           82를 인큐



                                                    11    0                   num = 7
                          Enque(&q, 82);        10            1            0   73
                                                     95  73                1   19
                                                  68       19              ❷
                                             9                   ❷ rear    3
                                                24                         4
                                                                           5
                                                56
                                             8                   3         6
                                                                           ❼   35
                                                  35
                                                                           8   56
                                                ❼             4            9   24
                                           front                           10
                                                    6     5                    68
                                                                           11  95
                                     82를 인큐
                                                    11    0                   num = 8
                                                                           0   73
                                                10            1
                                                     95  73                1   19
                                                  68       19              2   82
                                             9                   2         ❸        인큐
                                                24           82            4
                                                                           5
                                                56                         6
                                             8                   ❸ rear
                                                                           ❼   35
                                                  35
                                                                           8   56
                                                ❼             4            9   24
                                           front                           10  68
                                                    6     5
                                                                           11  95
                                               [그림 4-12] 큐에 인큐하는 과정(1)
                        그림 4-13은 rear 값이 max와 같아지는 것을 방지한 인큐를 구현한 모습입니다. rear 값을
                        1만큼 증가했을 때 큐의 최대 용량의 값인 max와 같아질 경우 rear를 배열의 처음인 0으로
                        변경해야 합니다(실습 4-5[B]의  2    ).     이렇게 하면 다음에 인큐할 데이터가 제대로 que[0] 위치에 저장됩니다.


                                                                                        04•스택과 큐  151
   146   147   148   149   150   151   152   153   154   155   156