#pragma once
#ifndef ___CustomerQueue
#define ___CustomerQueue
//CustomerQueue.h : 하나의 고객 정보를 관리하기 위한 클래스
//배열을 이용한 원형 큐 클래스
#include <cstdio>
#include <cstdlib>
#define MAX_QUEUE_SIZE 100
//오류 처리 함수
inline void error(const char *message) {
printf("%s\n", message);
exit(1);
}
struct Customer {
int id; //고객 번호
int tArrival; //고객이 도착한 시간
int tService; //이 고객의 서비스에 필요한 시간
Customer(int i = 0, int tArr = 0, int tServ = 0)
:id(i), tArrival(tArr), tService(tServ) {}
};
class CustomerQueue {
protected:
int front; //첫 번째 요소 앞의 위치
int rear; //마지막 요소 위치
Customer data[MAX_QUEUE_SIZE]; //요소의 배열
public:
CustomerQueue() { front = rear = 0; }
bool isEmpty() { return front == rear; }
bool isFull() { return (rear + 1) % MAX_QUEUE_SIZE == front; }
void enqueue(Customer val) { //큐의 삽입
if (isFull())
error("error : 큐가 포화 상태입니다\n");
else {
rear = (rear + 1) % MAX_QUEUE_SIZE;
data[rear] = val;
}
}
Customer dequeue() { //첫 항목을 큐에서 빼서 반환
if (isEmpty())
error(" Error : 큐가 공백상태입니다\n");
else {
front = (front + 1) % MAX_QUEUE_SIZE;
return data[front];
}
}
Customer peek() { //첫 항목을 큐에서 빼지 않고 반환
if (isEmpty())
error("Error : 큐가 공백상태입니다\n");
else
return data[(front + 1) % MAX_QUEUE_SIZE];
}
void display() { //큐의 모든 내용을 순서대로 출력
printf("큐 내용 : ");
int maxi = (front < rear) ? rear : rear + MAX_QUEUE_SIZE;
for (int i = front + 1; i <= maxi; i++)
printf("[2%d] ", data[i % MAX_QUEUE_SIZE]);
printf("\n");
}
};
#endif // !___CircularQueue
'Programming > DS SorceCode' 카테고리의 다른 글
DynamicMemoryAllocation.h : int 형 2차원 배열 동적 할당 함수 (0) | 2019.03.22 |
---|---|
BankSimulator.h : 은행 시뮬레이션 클래스 (0) | 2019.03.22 |
CircularDeque.h : CircularQueue 클래스를 상속해서 구현한 원형 덱 클래스 (0) | 2019.03.22 |
ArrayStack.h : 배열을 이용한 int 스택 클래스 (0) | 2019.03.22 |
CircularQueue.h : 배열을 이용한 원형 큐 클래스 (0) | 2019.03.22 |