[C언어 자료구조] 4.2 큐 구현
먼저 동적으로 큐를 생성하는 함수를 작성합시다.
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;
}
'언어 자료구조 알고리즘 > 디딤돌 자료구조 (C언어)' 카테고리의 다른 글
[C언어 자료구조] 5.2 스택 구현 (0) | 2016.11.26 |
---|---|
[C언어 자료구조] 5.1 스택 설계 (0) | 2016.11.26 |
[C언어 자료구조] 5. 스택(Stack) (1) | 2016.11.26 |
[C언어 자료구조] 4.4 큐 소스 코드 (0) | 2016.11.26 |
[C언어 자료구조] 4.3 큐 테스트 (0) | 2016.11.26 |
[C언어 자료구조] 4.1 큐 설계 (0) | 2016.11.26 |
[C언어 자료구조] 4. 큐(Queue) (0) | 2016.11.26 |
[C언어 자료구조] 3.4 연결리스트 소스 코드 (0) | 2016.11.26 |
[C언어 자료구조] 3.3 연결리스트 테스트 (0) | 2016.11.26 |
[C언어 자료구조] 3.2 연결리스트 구현 (0) | 2016.11.26 |