전공공부/자료구조 (Data Structures)

[자료구조] Queue

jooona 2020. 12. 30. 19:32
반응형

오늘은 큐에 대해서 공부해보려고 합니다.

 

큐는 앞에서 살펴본 스택과는 달리 삽입과 삭제가 다른 방향으로 나오는 형태의 리스트를 뜻합니다. 먼저 삽입된 데이터가 먼저 나오는 형태입니다. 이 때문에 First-In-First-Out (FIFO) list라고도 부릅니다. 

 

스택에서는 top을 이용해서 배열을 관리하는 것처럼, 큐에서는 front, rear 두 개의 변수를 이용합니다. front는 큐의 앞 쪽 끝을 가리키고, rear는 큐의 제일 뒤 쪽 끝을 가리키게 됩니다. 기본적인 형태는 다음과 같습니다.

 

 

front와 rear는 -1로 초기화하여 선언합니다. 데이터가 추가될 때마다 제일 뒤를 가리키는 변수인 rear가 1씩 증가하고, 데이터가 삭제될 때마다 가장 앞을 가리키는 변수인 front가 1씩 증가합니다. 

 


큐를 C를 이용하여 구현하면 다음과 같이 구현할 수 있습니다. 

 

#define MAX_QUEUE_SIZE 100

typedef struct {

      int key;

} element;



element queue [MAX_QUEUE_SIZE];

int rear = -1;

int front = -1;

 

큐에 데이터를 추가하는 함수는 다음과 같이 구현이 가능합니다.

 

void addq (element item) {

      if (rear == MAX_QUEUE_SIZE-1) // rear가 큐의 최대 사이즈에 도달하면

            printf("Queue is Full\n");      

      queue [++rear] = item;       

}

 

rear 값을 1 증가시킨 뒤 큐의 rear의 위치에 데이터를 집어 넣어 줍니다.

 

큐에서 데이터를 삭제하는 함수는 다음과 같이 구현이 가능합니다.

 

element deleteq () {

      if (front == rear)  // front와 rear의 값이 같다는 말은 큐가 비어있다는 것을 뜻합니다.

             printf("Queue is Empty\n");

      return queue [++front];

}

 

데이터를 삭제할 때는 front에 1을 추가시킨 뒤 큐의 front 위치의 데이터를 리턴 시켜줍니다.

 

 

이번 글에서는 큐의 대략적인 개념에 대해 알아보았습니다. 다음 글에서 큐의 조금 더 발전된 버전인 Circular Queue (원형 큐)에 대하여 알아보도록 하겠습니다. 읽어주셔서 감사합니다.

반응형

'전공공부 > 자료구조 (Data Structures)' 카테고리의 다른 글

[자료구조] Circular Queue  (3) 2020.12.30
[자료구조] Stack  (0) 2020.12.30