데이터 구조 - 배열 시 뮬 레이 션 링 대기 열
1. 배열 로 대기 열 을 모 의 할 때 재 활용 효 과 를 고려 하여 링 대기 열 로 표시 합 니 다.
2. 배열 시 뮬 레이 션 링 대기 열 에 데이터 방향 을 추가 합 니 다.
(rear+1) % maxSize = front
arr[rear]=n
rear = (rear+1) % maxSize
rear == front
int value = arr[front]
front = (front+1)%maxSize
return value
(rear + maxSize - front) % maxSize
5. 대기 열의 모든 데 이 터 를 표시 합 니 다.for (int i = front; i < front+size(); i++) {
System.out.printf(" arr[%d] = %d
",(i % maxSize),arr[(i % maxSize)]);
6. 코드 구현 front: 대기 열 첫 번 째 위치 rear: 대기 열의 마지막 데이터 의 다음 위치
package com.queue;
import java.util.Scanner;
import javax.management.RuntimeErrorException;
public class CircleArrayQueueDemo {
public static void main(String[] args) {
CircleArrayQueue circleArrayQueue = new CircleArrayQueue(4);
char key = ' ';
Scanner scanner = new Scanner(System.in);
boolean loop = true;
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(exit): ~");
key = scanner.next().charAt(0);
switch (key) {
case 's':
circleArrayQueue.showQueue();
break;
case 'a':
System.out.println(" ");
int n = scanner.nextInt();
circleArrayQueue.addQueue(n);
break;
case 'g':
try {
int res = circleArrayQueue.getQueue();
System.out.printf(" %d
",res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'h':
try {
int res = circleArrayQueue.headQueue();
System.out.printf(" %d
",res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop = false;
System.out.println(" ~");
break;
default:
break;
}
}
System.out.println(" ~~");
}
}
class CircleArrayQueue {
private int maxSize;//
private int front ;// ,
private int rear ;// ,
private int[] arr;//
public CircleArrayQueue (int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
rear = 0;
front = 0;
}
//
public boolean isEmpty() {
return rear == front;
}
//
public boolean isFull() {
// rear: ,
return (rear+1) % maxSize == front;
}
//
public void addQueue(int n) {
if (isFull()) {
System.out.println(" , ~~");
return ;
}
//
arr[rear]=n;
//rear ,rear:
rear = (rear+1) % maxSize;
}
// ,
public int getQueue() {
if (isEmpty()) {
throw new RuntimeErrorException(null," , ");
}
// front
int value = arr[front];
//front ,
front = (front+1)%maxSize;
//
return value;
}
//
public int headQueue() {
if (isEmpty()) {
throw new RuntimeErrorException(null," , ");
}
//front
return arr[front];
}
//
public void showQueue() {
if (isEmpty()) {
System.out.println(" , ");
return;
}
for (int i = front; i < front+size(); i++) {
System.out.printf(" arr[%d] = %d
",(i % maxSize),arr[(i % maxSize)]);
}
}
//
public int size() {
//rear = 1
//front = 0
//maxSize = 4
return (rear + maxSize - front) % maxSize;
}
}
7. 배열 시 뮬 레이 션 링 대기 열 은 재 활용 효과 에 달 했 고 데 이 터 를 꺼 낸 후에 대기 열 에 데 이 터 를 추가 할 수 있 으 며 front 와 rear 도 동태 적 으로 변화 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.