CH7큐의 활용
앞에서 스택을 배웠는데, 그때는 활용예제가 쉽진 않았다.
큐의 활용은 시뮬레이션이라는 예제를 통해 배울 것이다.
큐는 응용프로그램 만드는데 직접 사용하거나, 문서에서 접하거나, 또는 시스템개발에서 메모리 핸들링에서 접하게 될 가능성이 높다.
햄버거 가게 점장이 대기실을 만들때, 규모를 판단하는 상황을 고려해보자.
적절한 대기실의 규모를 시뮬레이션을 통해 결정한다고 할때, 적절한 시뮬레이션 방법은..?
시뮬레이션을 위한 임의의 기준이다.
이 예제는 구현까지는 권유하지 않고, 코드분석을 목적으로 한다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "CircularQueue.h"
#define CUS_COME_TERM 15 // 고객의 주문 간격: 초 단위
#define CHE_BUR 0 // 치즈버거 상수
#define BUL_BUR 1 // 불고기버거 상수
#define DUB_BUR 2 // 더블버거 상수
#define CHE_TERM 12 // 치즈버거 제작 시간: 초 단위
#define BUL_TERM 15 // 불고기버거 제작 시간: 초 단위
#define DUB_TERM 24 // 더블버거 제작 시간: 초 단위
int main(void)
{
int makeProc=0; // 햄버거 제작 진행상황
int cheOrder=0, bulOrder=0, dubOrder=0;
int sec;
Queue que;
QueueInit(&que);
srand(time(NULL));
// 아래 for문의 1회 회전은 1초의 시간 흐름을 의미함
for(sec=0; sec<3600; sec++)
{
if(sec % CUS_COME_TERM == 0) //15초마다 손님 접근
{
switch(rand() % 3)
{
case CHE_BUR:
Enqueue(&que, CHE_TERM);
cheOrder += 1;
break;
case BUL_BUR:
Enqueue(&que, BUL_TERM);
bulOrder += 1;
break;
case DUB_BUR:
Enqueue(&que, DUB_TERM);
dubOrder += 1;
break;
}
}
if(makeProc==0 && !QIsEmpty(&que))
makeProc = Dequeue(&que); //첫 시행에서 버거 하나 꺼냄.
makeProc--; //for문 1회마다 1초씩 줄어드는 모습 구현
}
printf("Simulation Report! \\n", QUE_LEN);
printf(" - Cheese burger: %d \\n", cheOrder);
printf(" - Bulgogi burger: %d \\n", bulOrder);
printf(" - Double burger: %d \\n", dubOrder);
printf(" - Waiting room size: %d \\n", QUE_LEN);
return 0;
}
hamburgerSim.c
파일의 소스코드