링 큐 의 배열 구현 (JAVA)
22166 단어 데이터 구조 와 알고리즘데이터 구조대열자바
대기 열 은 선진 적 인 선형 구조 이 고 링 구 조 는 대기 열 이 가득 찬 후에 데 이 터 를 꺼 내 면 꺼 낸 위치 에 데 이 터 를 계속 추가 할 수 있다.PS: 실리콘밸리 의 총 결 을 배우 고 콜 을 합 니 다!
1. 기본 적 인 사고
대기 열: (1) front 는 대기 열의 앞 요소, rear 대기 열의 마지막 요소 입 니 다.기본 값 균일 - 1.front 추출 데이터 + 1, rear 추가 데이터 + 1.(2) 대기 열 이 가득 찬 조건: rear = MAX - 1;배열 최대 용량.빈 조건: front = rear;(3) 추가 작업: 가득 찼 는 지, 꼬리 포인터 rear + 1;
링 대기 열: (1) front 는 대기 열 첫 번 째 이 고 rear 는 대기 열의 마지막 요소 의 다음 위치 입 니 다.기본 값 0;(2) 대기 열 비어 있 음: front = rear;(3) 대기 열 가득: (rear + 1)% max = front; (4) 대기 열 에 있 는 유효 데이터: (rear + size - front)% size.
2 코드 구현
package test.duilie;
import java.util.Scanner;
public class CircleArrayQueueDemo {
public static void main(String[] args) {
// );
char key = ' '; //
ArrayQueue queue = new ArrayQueue(4);
Scanner scanner = new Scanner(System.in);//
boolean loo1p = true;
//
while(loo1p) {
System.out.println("s(show): ");
System.out.println("e(exit): ");
System.out.println("a(add): ");
System.out.println("g(get): ");
System.out.println("h(head): ");
key = scanner.next().charAt(0);//
switch (key) {
case 's':
queue.showQueue();
break;
case 'a':
System.out.println(" ");
int value = scanner.nextInt();
queue.addQueue(value);
break;
case 'g': //
try {
int res = queue.getQueue();
System.out.printf(" %d
", res);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
break;
case 'h': //
try {
int res = queue.headQueue();
System.out.printf(" %d
", res);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
break;
case 'e': //
scanner.close();
loo1p = false;
break;
default:
break;
}
}
System.out.println(" ~~");
}
}
// - ArrayQueue
class ArrayQueue {
private int maxSize; // maxsize-1
private int front; //
private int rear; //
private int[] arr; // ,
//
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
front = 0; // ,
rear = 0; // -1,
}
//
public boolean isFull() {
return (rear+1)%maxSize == front;
}
//
public boolean isEmpty() {
return rear == front;
}
//
public void addQueue(int n) {
//
if (isFull()) {
System.out.println(" , ~");
return;
}
// rear
arr[rear] = n;
rear=(rear+1)%maxSize;//
}
// ,
public int getQueue() {
//
if (isEmpty()) {
//
throw new RuntimeException(" , ");
}
// front
int value=arr[front];
front=(front+1)%maxSize;
return value;
}
//
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 headQueue() {
//
if (isEmpty()) {
throw new RuntimeException(" , ~~");
}
return arr[front];
}
public int size(){
return (rear+maxSize-front)%maxSize;
}
}
일반 대기 열 은 링 과 비슷 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.