728x90
반응형
자바에는 큐 클래스가 존재합니다만 배열로 큐를 구현해봤습니다.
package 패키지명
import java.util.Arrays;
import java.util.Scanner;
public class 클래스명 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayQueue queue = new ArrayQueue(5); //큐에 담을 수 있는 최대개수는 5
while(true) {
System.out.println(String.format("현재 수: %d / %d", queue.size(), queue.capacity()));
System.out.print("1. enq(add), 2.deq(poll), 3.peek, 4.clear, 5.dump, 0.종료 ");
int num = sc.nextInt();
if(num == 0) {
System.exit(0);
break;
}
int x;
switch(num) {
case 1:
System.out.print("데이터 : ");
x = sc.nextInt();
queue.add(x);
break;
case 2:
x = queue.poll();
System.out.println("나간 데이터 :" + x);
break;
case 3:
x = queue.peek();
System.out.println("첫번째 데이터 :" + x);
break;
case 4:
queue.clear();
break;
case 5:
queue.dump();
break;
}
}
}
}
class ArrayQueue{
private int max; //큐의 최대용량
private int front; //첫 번째 요소의 커서
private int rear; //마지막 요소의 커서
private int cnt; //현재 데이터의 수
private int[] queue; //큐
public ArrayQueue(int capacity){ //생성자
this.max = capacity;
this.cnt = this.front = this.rear = 0;
try {
this.queue = new int[this.max];
}catch(Exception e) {
this.max = 0;
}
}
public int add(int x) { //큐에 담기
if(cnt >= max) {
System.out.println("Queue if Full.");
return x;
}
queue[rear++] = x; //추가시 rear를 증가시킨다.
cnt++;
if(rear == max) rear = 0; //rear는 최대값을 초과할 수 없으므로 최대값과 같으면 0으로 리셋한다.
return x;
}
public int peek() { //맨 앞에 있는 숫자 가져오기
if(cnt <= 0) {
System.out.println("Queue is Empty");
}
return queue[front];
}
public int poll() { //맨 앞에 있는 숫자 가져오기
if(cnt <= 0) {
System.out.println("Queue is Empty");
return 0;
}
int x = queue[front++]; //맨 앞에 있는 숫자를 가져온 후 front를 증가시킨다.
cnt--; //poll은 삭제의 개념이므로 개수를 줄인다.
if(cnt < 0) cnt = 0;
if(front == max) front = 0; //front는 최대값을 초과할 수 없으므로 최대값과 같으면 0으로 리셋한다.
return x;
}
public void clear() {
this.rear = this.front = this.cnt = 0; //front, rear, cnt를 0으로 초기화
}
public boolean isEmpty() {
return this.cnt <= 0;
}
public int capacity() {
return this.max;
}
public boolean isFull() {
return this.cnt >= this.max;
}
public int size() {
return this.cnt;
}
public void dump() {
if(cnt <= 0) {
System.out.println("Queue is Empty");
}else {
System.out.println(Arrays.toString(queue));
}
}
}
728x90
반응형
'프로그래밍 언어 > 자바' 카테고리의 다른 글
[자바] 배열로 스택 구현하기 (0) | 2024.05.08 |
---|---|
[이클립스] import 한번에 하기 (0) | 2024.02.01 |
AWT - GUI 프로그래밍 #3 Button (0) | 2022.09.12 |
AWT - GUI 프로그래밍 #2 Label (0) | 2022.09.12 |
AWT - GUI 프로그래밍 #1 (0) | 2022.09.12 |