언어 자료구조 알고리즘/디딤돌 자료구조 (C언어)

[C언어 자료구조] 4.2 큐 구현

언제나휴일 2016. 11. 26. 13:06
반응형

[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;

}

 

반응형