본문 바로가기
Programming/Algorithm

C언어 큐(QUEUE) 예제

by 제타 2018. 4. 25.
반응형

큐(QUEUE) - 자료구조 

리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입 선출인 FIFO(first in first out) 리스트라고 한다.



다음은 C언어로 크기가 5인 큐를 구현한 코드이다.
대충 설명을 하면 크기가 5인 큐를 만들고 (메모리 할당을 하고) 초기화를 하고 데이터를 삽입(PUSH)하고 데이터를 추출(POP)하는 것이다.
삽입 순서가 1 -> 2 -> 3 -> 4 -> 5 인 경우 출력 순서는 1 -> 2 -> 3 -> 4 -> 5 이다.


큐의 사용처는 가장 쉽게 볼 수 있는 곳이 프린트이다. 프린터가 출력하는 알고리즘은 큐 형태를 본 따 만든 것으로 큐에 먼저 들어온 문서부터 출력하기 때문이다. 이 외에도 OS 내부적으로도 큐를 쓰는 곳이 있다. 프로세스가 먼저 메모리를 선점하면 그 프로세스부터 메로리를 반환하도록 하는 것이다.


#include <stdio.h>

#include <stdlib.h>


#define QUE_SIZE 5


int *pQue = NULL;


void Push(int nData){

int nCount = 0;

for (int i = 0; i < QUE_SIZE; i++){

if (pQue[i] == NULL){

break;

}

nCount++;

}

if (nCount != QUE_SIZE){

pQue[nCount] = nData;

}

 

}


int Pop(){


int nCount = 0;

int nResult = 0;

for(int i = 0; i < QUE_SIZE; i++){


if (pQue[i] != NULL)

{

break;

}

nCount++;

}


if (nCount != QUE_SIZE){

nResult = pQue[nCount];

pQue[nCount] = NULL;

}


for(int i=0; i < QUE_SIZE; i++){

pQue[i] = pQue[i+1];

}


pQue[QUE_SIZE-1] = NULL;


return nResult;

}





int main(void){

//메모리 할당 

pQue = (int*)malloc((sizeof(int)) * QUE_SIZE);


//초기화

for(int i = 0; i < QUE_SIZE; i++){

pQue[i] = NULL;

}


// 데이터 삽입

Push(1);

Push(2);

Push(3);

Push(4);

Push(5);


//데이터 추출

printf("%d\n", Pop());

printf("%d\n", Pop());

printf("%d\n", Pop());

printf("%d\n", Pop());

printf("%d\n", Pop());



return 0;

}



반응형