대기열
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 5
typedef struct {
int id;
int arrival_time;
int service_time;
}element;
typedef struct {
element data[MAX_QUEUE_SIZE];
int front, rear;
}QueueType;
void error(char* message) {
fprintf(stderr, "%s\n", message);
}
void init_queue(QueueType* q) {
q->front = 0;
q->rear = 0;
}
int is_empty(QueueType* q) {
return q->front == q->rear;
}
int is_full(QueueType* q) {
return q->front == (q->rear + 1) % MAX_QUEUE_SIZE;
}
void enqueue(QueueType* q, element item) {
if (is_full(q)) {
error("큐 포화 에러");
}
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
q->data[q->rear] = item;
}
element dequeue(QueueType* q) {
if (is_empty(q)) {
error("큐 공백 에러");
}
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return q->data[q->front];
}
element peek(QueueType* q) {
if (is_empty(q)) {
error("큐 공백 에러");
}
return q->data[(q->front + 1) % MAX_QUEUE_SIZE];
}
void print_queue(QueueType* q) {
printf("QUEUE(front=%d rear=%d) = ", q->front, q->rear);
if (!is_empty(q)) {
int i = q->front;
do {
i = (i + 1) % MAX_QUEUE_SIZE;
printf("%d | ", q->data[i]);
if (i == q->rear) {
break;
}
} while (i != q->front);
}
printf("\n");
}
int main() {
int minutes = 60;
int total_wait = 0;
int total_customers = 0;
int service_time = 0;
int service_customer;
QueueType queue;
init_queue(&queue);
srand(time(NULL));
for (int clock = 0; clock < minutes; clock++) {
printf("현재시간=%d\n", clock);
if ((rand() % 10) < 3) {
element customer;
customer.id = total_customers++;
customer.arrival_time = clock;
customer.service_time = rand() % 3 + 1;
enqueue(&queue, customer);
printf("고객 %d가 %d분에 들어옵니다. 업무처리시간= %d분\n",customer.id,customer.arrival_time,customer.service_time);
}
if (service_time > 0) {
printf("고객 %d 업무처리중입니다. \n", service_customer);
service_time--;
}
else {
if (!is_empty(&queue)) {
element customer = dequeue(&queue);
service_customer = customer.id;
service_time = customer.service_time;
printf("고객 %d이 %d분에 업무를 시작합니다. 대기시간은 %d분이었습니다.\n", customer.id, clock, clock - customer.arrival_time);
total_wait += clock - customer.arrival_time;
}
}
}
printf("전체 대기 시간=%d분 \n", total_wait);
return 0;
}
'DSA' 카테고리의 다른 글
다항식 계산기 (Polynomial Calculator) (0) | 2024.10.02 |
---|---|
리스트 1 (ArrayList) (0) | 2024.08.26 |
덱(Deque) 2 (0) | 2024.08.25 |
큐(Queue) 2 (0) | 2024.08.22 |
스택(Stack) 활용 예제 3 (0) | 2024.08.21 |