티스토리 뷰

덱을 이해하고 있다면 덱을 큐처럼 사용할 수 있다는 사실을 알고 있을 것입니다. 따라서 덱을 이용해서 큐를 구현해 보기로 합니다. 다음 두 파일을 만들어서 덱을 기반으로 하여 큐를 구현해 봅니다.

  • DequeBaseQueue.h    큐의 구현을 위한 헤더 파일
  • DequeBaseQueue.c    큐를 구현하고 있는 소스 파일

 

큐의 구현에 사용되는 덱의 헤더 파일과 소스 파일은 앞서 양방향 연결 리스트 기반으로 정의했던 것을 사용합니다. 그리고 큐의 헤더 파일에는 다음 함수들이 선언되어야 합니다.

void QueueInit(Queue* pq);             //큐의 초기화
int QIsEmpty(Queue* pq);               //큐가 비어 있는지 확인
void Enqueue(Queue* pq, Data data);    //큐에 데이터 저장
Data Dequeue(Queue* pq);               //큐에서 데이터 반환 및 소멸
Data QPeek(Queue* pq);                 //데이터를 소멸하지 않고 반환

제가 작성한 코드는 아래의 '더보기'를 클릭하여 확인할 수 있습니다.

만약 이해되지 않거나, 추가 설명이 필요하다면 언제든지 물어보길 바랍니다.

더보기

어차피 이미 만들어진 덱을 이용해서 큐를 구현하는 것이기 때문에 다음과 같이 덱을 이용하는 간단한 형태로 구현해봤습니다.

//DequeBaseQueue.h 헤더 파일로 저장
#ifndef DEQUEBASEQUEUE_H
#define DEQUEBASEQUEUE_H
#include "DLLBDeque.h"

typedef Deque Queue;

void QueueInit(Queue* pq);
int QIsEmpty(Queue* pq);
void Enqueue(Queue* pq, Data data);
Data Dequeue(Queue* pq);
Data QPeek(Queue* pq);

#endif
//DequeBaseQueue.c
#include "DequeBaseQueue.h"
#include <stdio.h>
#include <stdlib.h>

void QueueInit(Queue* pq)
{
	DequeInit(pq);
}

int QIsEmpty(Queue* pq)
{
	return DQIsEmpty(pq);
}

void Enqueue(Queue* pq, Data data)
{
	DQAddLast(pq, data);
}

Data Dequeue(Queue* pq)
{
	DQRemoveFirst(pq);
}

Data QPeek(Queue* pq)
{
	DQGetFirst(pq);
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함