Queue ADT (Abstract Data Type)
연산 (Operations)
- boolean isFull() → 큐가 가득 찼는지 확인하여 boolean 값을 반환합니다.
- boolean isEmpty() → 큐가 비어 있는지 확인하여 boolean 값을 반환합니다.
- void enqueue(itemType item) → 큐에 데이터를 추가합니다.
- itemType dequeue() → 큐에서 가장 먼저 추가된 데이터를 제거하고 해당 값을 반환합니다.
상태 (State)
- int front → 큐의 첫 번째 요소의 위치를 기록합니다.
- int rear → 큐의 마지막 요소의 위치를 기록합니다.
- itemType data[maxsize] → 큐의 데이터를 관리하는 배열로, 최대 maxsize개의 데이터를 관리합니다.
세부 동작 (Detailed Operations)
Data 추가 (Enqueue)
- isFull() → 큐가 가득 찼는지 먼저 확인합니다.
- rear을 1 증가시킵니다.
- data[rear]에 새로운 데이터를 추가합니다.
Data 제거 (Dequeue)
- isEmpty() → 큐가 비어 있는지 먼저 확인합니다.
- front를 1 증가시킵니다.
- data[front]의 값을 반환합니다.
큐 ADT의 예시 구현
public class Queue<T> {
private int maxSize;
private int front;
private int rear;
private T[] data;
@SuppressWarnings("unchecked")
public Queue(int maxSize) {
this.maxSize = maxSize;
this.data = (T[]) new Object[maxSize];
this.front = 0;
this.rear = -1;
}
public boolean isFull() {
return rear == maxSize - 1;
}
public boolean isEmpty() {
return front > rear;
}
public void enqueue(T item) {
if (isFull()) {
throw new IllegalStateException("Queue is full");
}
data[++rear] = item;
}
public T dequeue() {
if (isEmpty()) {
throw new IllegalStateException("Queue is empty");
}
return data[front++];
}
}