public class Memory {
// 원형 큐의 후단을 관리하기 위한 인덱스
// 스택의 전단과 후단을 관리하기 위해 사용하는 인덱스
protected int rear;
protected int[] arr;
protected int maxSize;
public Memory(int num) {
rear = 0;
maxSize = num;
arr = new int[num];
}
public void push(int num) {
rear = (rear + 1) % maxSize;
arr[rear] = num;
}
public void disp() {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println("");
}
public void setLast_index(int rear) {
this.rear = rear;
}
}
public class myQueue extends Memory {
// 원형 큐의 전단을 관리하기 위한 인덱스
private int front;
public myQueue(int num) {
super(num);
front = 0;
}
public boolean isFull() {
return ((rear + 1) % maxSize == front);
}
public void pop() {
front = (front + 1) % maxSize;
arr[front] = 0;
}
// 큐의 공백을 검사하는 함수
// 큐의 전단과 마지막을 가리키는 위치가 같으면 공백상태임
public boolean empty() {
return (front == rear);
// 전단과 후단이 같으면 true 즉 공백
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean b = true;
int num, pushData;
myQueue my = new myQueue(6);
do {
System.out.println("[Queue] 1.push\t2.pop\t3.display");
num = sc.nextInt();
switch (num) {
case 1:
if (my.isFull()) {
System.out.println("에러..... 큐가 가득 찼습니다..!!!");
break;
} else {
System.out.print("Queue Data Push :");
pushData = sc.nextInt();
my.push(pushData);
}
break;
case 2:
if (my.empty()) {
System.out.println("큐에 데이터가 없어서 삭제 못함!!!");
break;
} else {
my.pop();
break;
}
case 3:
if (my.empty()) {
System.out.println("큐에 데이터가 없어서 볼 필요없음!!");
break;
} else {
my.disp();
break;
}
}
} while (b);
sc.close();
}
}
* 예외처리 같은거 귀찮아서 안함.. 수정해서 재업로드 예정!!
'자료구조' 카테고리의 다른 글
Stack (노드 개념 적용) (0) | 2020.02.18 |
---|---|
ArrayList (0) | 2020.02.13 |
연결리스트(Linked List) (0) | 2020.02.13 |
리스트 (LIST) (0) | 2020.02.13 |
자료구조와 알고리즘 (0) | 2020.01.15 |