Page 148 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 148
40
41 /*--- 큐에서 검색 ---*/
42 int Search(const IntQueue *q, int x);
43
44 /*--- 모든 데이터 출력 ---*/
45 void Print(const IntQueue *q);
46
47 /*--- 큐 종료 ---*/
48 void Terminate(IntQueue *q);
49 #endif
큐 구조체 IntQueue
큐를 관리하는 구조체로, 아래와 같이 5개의 멤버로 구성됩니다.
1. 큐로 사용할 배열(que)
인큐하는 데이터를 저장하기 위한 큐로, 사용할 배열의 첫 번째 요소에 대한 포인터입니다.
2. 큐의 최대 용량(max)
큐의 최대 용량을 저장하는 멤버로, 이 값은 배열 que에 저장할 수 있는 최대 요소의 개수와
같습니다.
3. 프런트(front)
인큐하는 데이터 가운데 첫 번째 요소의 인덱스를 저장하는 멤버입니다.
4. 리어(rear)
인큐한 데이터 가운데 맨 나중에 넣은 요소의 하나 뒤의 인덱스를 저장하는 멤버입니다.
다음 인큐 시에 데이터가 저장될 요소의 인덱스를 미리 준비해 두는 것이라고 생각하면 됩니다.
5. 현재 데이터 개수(num)
큐에 쌓아 놓은 데이터 수를 나타내는 멤버입니다. front와 rear의 값이 같은 경우 큐가 비어
있는지, 가득 찼는지 구별할 수 없는 상황을 피하기 위해 이 변수가 필요합니다(그림 4-11). 큐
가 비어 있을 때 num은 0이고, 가득 찼을 때는 num과 max의 값이 같습니다.
여기서 다음에 나올 그림 4-11의 a 와 b 를 비교하면서 ‘front와 rear의 값이 같음’으로 큐
148 C 알고리즘