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