큐(QUEUE) - 자료구조
리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입 선출인 FIFO(first in first out) 리스트라고 한다.
큐의 사용처는 가장 쉽게 볼 수 있는 곳이 프린트이다. 프린터가 출력하는 알고리즘은 큐 형태를 본 따 만든 것으로 큐에 먼저 들어온 문서부터 출력하기 때문이다. 이 외에도 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;
}
'Programming > Algorithm' 카테고리의 다른 글
c언어 풍차(바람개비) 만들기 (122) | 2018.04.26 |
---|---|
C언어 스택(STACK) 예제 (0) | 2018.04.25 |
c언어 반복문을 사용해서 10진수를 2진수 문자열로 만들기 (0) | 2018.04.20 |
c언어로 짠 어떤 숫자가 들어오든 1의 자리는 버리고 10의 자리는 올리기 (0) | 2018.04.20 |
c언어로 짠 띄어쓰기 기준으로 문자열 순서만 뒤집기 (0) | 2018.04.20 |