요리사 해 우 - 데이터 구조 (3) 의 배열 시 뮬 레이 션 링 대기 열
3425 단어 요리사 가 소 를 풀다 -- 데이터 구조
1. 정의
링 대기 열 은 개인의 굵 은 이해 로 반복 적 으로 사용 할 수 있 습 니 다. 지난 번 에 쓴 데이터 시 뮬 레이 션 대기 열 은 일회 성 대기 열 로 사용 하면 사용 할 수 없습니다. 링 대기 열 은 데 이 터 를 꺼 낸 후에 여가 시간 을 반복 적 으로 이용 할 수 있 습 니 다.
2. 예 를 들 어
사용 가능
2 이미 사용
3 이미 사용
3. 코드 샘플
public static void main(String[] args) {
//
CircleQueue queue = new CircleQueue(4);
char key = ' ';
boolean loop = true;
Scanner sc = new Scanner(System.in);
while (loop) {
System.out.println("s(show) ");
System.out.println("a(add) ");
System.out.println("g(get) ");
System.out.println("h(head) ");
System.out.println("e(exist) ");
key = sc.next().charAt(0);//
switch (key) {
case 's':
queue.showQueue();
break;
case 'g':
try {
int v = queue.getQueue();
System.out.printf(" :%d
", v);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'a':
System.out.println(" ");
int value = sc.nextInt();
queue.addQueue(value);
break;
case 'h':
int h = queue.headQueue();
System.out.printf(" :%d
", h);
break;
case 'e':
loop = false;
break;
}
}
}
}
class CircleQueue {
private int maxSize; //
private int front; //
private int rear; //
private int[] arr; //
public CircleQueue(int maxSize) {
this.maxSize = maxSize;
this.arr = new int[maxSize];
}
//
public void showQueue() {
if (rear == front) {
System.out.println(" ");
return;
}
/**
* front , front + ? , front
*/
for (int i = front; i < front + size(); i++) {
System.out.printf("arr[%d] = %d
", i % maxSize, arr[i % maxSize]);
}
}
//
public boolean addQueue(int ele) {
if ((rear + 1) % maxSize == front) {
System.out.println(" ");
return false;
}
arr[rear] = ele;
rear = (rear + 1) % maxSize;
return true;
}
//
public int getQueue() {
if (rear == front) {
throw new RuntimeException(" ");
}
int value = arr[front];
front = (front + 1) % maxSize;
return value;
}
//
public int headQueue() {
isNull();
return arr[front];
}
public void isNull() {
if (rear == front) {
throw new RuntimeException(" ");
}
}
/**
*
*
* @return
*/
public int size() {
/**
* rear = 3
* maxSize = 3
* front = 0
*/
return (rear + maxSize - front) % maxSize;
}