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

디큐 함수 Deque

                        Deque 함수는 큐에서 데이터를 디큐하는 함수입니다. 디큐에 성공하면 0을 반환하지만 큐
                        가 텅 비어 디큐할 수 없으면(num <= 0 상태) -1을 반환합니다. 그림 4-14는 디큐를 수행하는
                        과정 중의 하나로, 처음부터 차례대로 데이터 8개(35, 56, 24, 68, 95, 73, 19, 82)를 저장한 큐에
                        서 35를 디큐하는 모습입니다. que[front](que[7])에 저장한 값 35를 꺼내고 front 값을 1만

                        큼 증가한 다음 num 값을 1만큼 감소합니다(실습 4-5[C]의  1 ).


                        여기서 인큐와 마찬가지로 디큐도 인덱스 초과 문제가 발생합니다. 디큐하기 전의 front 값이

                        배열의 끝(11)이라면 위의 과정을 거치고 난 후의 front 값은 max(12)가 되어 배열 마지막 요
                        소의 인덱스를 초과합니다.


                          35를 디큐


                                                                              num = 8
                                                    11    0
                          Deque(&q, &x);                                   0   73
                                                10            1            1
                                                     95  73                    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
                                     35를 디큐
                                                    11    0                   num = 7
                                                                           0   73
                                                10            1
                                                     95  73                1   19
                                                  68       19              2   82
                                             9                   2         ❸
                                                24           82            4
                                                                           5
                                                56                         6
                                             ❽                   ❸ rear
                                                                           7   35
                                         front    35
                                                                           ❽   56
                                                7             4            9   24
                                                                           10  68
                                                    6     5
                                                                           11  95
                                              [그림 4-14] 큐에서 디큐하는 과정(1)
                        그림 4-15는 이런 문제를 해결한 디큐의 모습입니다. 1만큼 증가한 front 값이 큐의 용량인
                        max와 같아지면 front 값을 배열의 처음인 0으로 변경해야 합니다(실습 4-5[C]의  2 ).
                            이렇게 하면 다음에 디큐를 수행하더라도 제대로 que[0]의 위치에서 데이터를 꺼냅니다.






                                                                                        04•스택과 큐  153
   148   149   150   151   152   153   154   155   156   157   158