Home 큐(Queue)
Post
Cancel

큐(Queue)

C언어를 기반으로 자료구조에서의 큐에 대해 정리해보려한다.

Queue란?

큐는 데이터의 삽입과 삭제를 특정 규칙에 따라 처리하는 자료구조이고, 데이터가 먼저 들어온 순서대로 처리되는 FIFO (First-In-First-Out) 방식으로 동작한다.


Queue의 용어

  • Front : Queue에서 Item이 삭제되는 위치를 가리키는 포인터
  • Rear : Queue에서 Item이 삽입되는 위치를 가리키는 포인터
  • EnQueue : Queue의 Rear부분에 Item을 삽입함
  • DeQueue : Queue의 Front부분에 Item을 삭제함

Queue의 기능 구현

  • InitQueue: Queue를 초기화 시킴
  • IsFull: Queue가 가득차 있는지 확인함
  • IsEmpty: Queue가 비어있는지 확인함
  • Peek: Front의 Item을 반환함
  • EnQueue: Queue의 Rear부분에 Item을 삽입함
  • DeQueue: Queue의 Front부분에 Item을 삭제함

Queue의 기능 구현 코드

Queue 구현 코드

1
2
3
4
5
6
#define max_queue 100

typedef struct {
	int front, rear;
	int items[max_queue];
}queue;

InitQueue 함수 구현 코드

1
2
3
void InitQueue(queue* pqueue){
	pqueue->front = pqueue-> rear = 0;
}

IsFull 함수 구현 코드

1
2
3
bool IsFull(queue* pqueue){
	return pqueue->front == (pqueue->rear+1)%max_queue;
}

IsEmpty 함수 구현 코드

1
2
3
bool IsEmpty(queue* pqueue){
	return pqueue->front == pqueue->rear;
}

Peek 함수 구현 코드

1
2
3
4
int Peek(queue* pqueue){
	if(IsEmpty(pqueue)) exit(1);
	return pqueue->items[pqueue->front];
}

EnQueue 함수 구현 코드

1
2
3
4
5
void EnQueue(queue* pqueue, int item){
	if(IsFull(pqueue)) exit(1);
	pqueue->items[pqueue->rear]= item;
	pqueue->rear = (pqueue->rear+1) % max_queue;
}

DeQueue 함수 구현 코드

1
2
3
4
void DeQueue(queue* pqueue){
	if(IsEmpty(pqueue)) exit(1);
	pqueue->front = (pqueue->front+1)% max_queue;
}

Queue의 시간 복잡도

Queue탐색삽입삭제
Big-OO(n)O(1)O(1)

느낀점

Queue를 배워보면서 Stack과 달리 Queue는 FIFO 방식으로 동작한다는 것을 새롭게 알게 되었다. Queue는 Linear Queue, Circular Queue을 구현 할 수 있는데, Circular Queue로 구현을 하면 공간의 효율성 측면에서 이점을 가진다는 것을 알게 되었다. Queue는 Stack과 마찬가지로 자료구조에서 중요한 개념이므로 잘 기억해 둬야겠다.

This post is licensed under CC BY 4.0 by the author.