CH7큐의 활용

07-4. 큐의 활용

앞에서 스택을 배웠는데, 그때는 활용예제가 쉽진 않았다.

큐의 활용은 시뮬레이션이라는 예제를 통해 배울 것이다.

Untitled

큐는 응용프로그램 만드는데 직접 사용하거나, 문서에서 접하거나, 또는 시스템개발에서 메모리 핸들링에서 접하게 될 가능성이 높다.

햄버거 가게 점장이 대기실을 만들때, 규모를 판단하는 상황을 고려해보자.

적절한 대기실의 규모를 시뮬레이션을 통해 결정한다고 할때, 적절한 시뮬레이션 방법은..?

Untitled

시뮬레이션을 위한 임의의 기준이다.

이 예제는 구현까지는 권유하지 않고, 코드분석을 목적으로 한다.

#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파일의 소스코드