먼저 동적으로 큐를 생성하는 함수를 작성합시다.
EHQueue *New_EHQueue() {
여기서 설계한 큐는 연결 리스트이므로 연결리스트를 동적으로 생성하여 반환합니다. 이처럼 이미 작성한 기능을 이용하여 전달하는 역할만 하는 함수를 래퍼(Wrapper) 함수라고 부릅니다.
return New_LinkedList(); }
동적으로 생성한 큐를 소멸하는 함수도 래퍼 함수로 작성합니다.
void Delete_EHQueue(EHQueue *ehq) { Delete_LinkedList(ehq); }
큐에 자료를 보관하는 함수도 연결리스트에 순차 보관하는 함수를 호출하는 래퍼 함수로 작성합니다.
void EHQueue_Put(EHQueue *ehq, Element data) { LinkedList_PushBack(ehq,data); }
큐에서 자료를 꺼내는 함수를 작성합시다.
Element EHQueue_Get(EHQueue *ehq) { Element element = 0;
만약 큐가 비어있지 않을 때 처리할 코드를 작성합시다.
if( ! EHQueue_IsEmpty(ehq)) {
연결리스트에 처음 보관한 자료를 가진 노드의 위치 정보를 얻어옵니다.
Link first = LinkedList_Begin(ehq);
그리고 그 위치의 보관한 자료를 반환할 element에 설정합니다.
element = first->data;
이제 해당 노드를 연결리스트에서 제거합니다.
LinkedList_Erase(ehq,first); }
element를 반환합니다.
return element; }
큐가 비었는지 확인하는 함수는 연결리스트의 usage 멤버 값이 0인지 확인한 결과를 반환합니다.
int EHQueue_IsEmpty(EHQueue *ehq) { return ehq->usage == 0; }
다음은 EHQueue.c 파일의 내용입니다.
//EHQueue.c #include "EHQueue.h" EHQueue *New_EHQueue() { return New_LinkedList(); } void Delete_EHQueue(EHQueue *ehq) { Delete_LinkedList(ehq); } void EHQueue_Put(EHQueue *ehq, Element data) { LinkedList_PushBack(ehq,data); } Element EHQueue_Get(EHQueue *ehq) { Element element = 0; if( ! EHQueue_IsEmpty(ehq)) { Link first = LinkedList_Begin(ehq); element = first->data; LinkedList_Erase(ehq,first); } return element; } int EHQueue_IsEmpty(EHQueue *ehq) { return ehq->usage == 0; }