링 큐 대기 열
23505 단어 데이터 구조
배열 대기 열 을 재 활용 할 수 없 는 문 제 를 해결 하기 위해 서 입 니 다.사용 하 는 사고방식 은 모델 링 이다.% 는 이전의 queue 에 비해 사고방식 이 바 뀌 었 다.현재 rear: rear 는 대기 열의 마지막 요소 의 다음 위 치 를 가리 키 고 있 습 니 다. 현재 의 front: front 를 약속 하기 위해 하나의 공간 을 비 워 두 기 를 원 하기 때 문 입 니 다. 즉, arr [front] 는 대기 열의 첫 번 째 요소 입 니 다. 그들의 초기 값 은 현재 0 으로 설정 되 어 있 습 니 다.rear 는 다음 요소 이 고 front 는 첫 번 째 요소 이기 때문에 초기 값 은 0 입 니 다.이전의 정상 적 인 대기 열, rear 는 현재 요소 이 고 front 는 첫 번 째 요소 의 이전 요소 이기 때문에 초기 값 은 - 1 입 니 다.
// ArrayQueue
class circleArray{
private int MaxSize; //
private int front; //
private int rear; //
private int[] arr; // ,
//
public circleArray(int arrMaxSize)
{
MaxSize=arrMaxSize;
arr=new int[MaxSize];
//front : front , arr[front]
//front = 0
front=0;
//rear :rear . .
//rear = 0
rear=0;
}
//
public boolean issFull(){
return (rear+1)%MaxSize==front;
}
//
public boolean issEmpty(){
return rear==front;
}
//
public void addQueue(int n)
{
//
if (issFull())
{
System.out.println(" , ");
return;
}
//
arr[rear]=n;
// rear ,
rear=(rear+1)%MaxSize;
}
// ,
public int getQueue()
{
//
if (issEmpty())
{
//
throw new RuntimeException(" ");
}
// front
//1. front
//2. front
//3.
int value=arr[front];
front= (front+1)%MaxSize;
return value;
}
//
public void showQueue(){
if (issEmpty())
{
System.out.println(" ");
return;
}
// : front ,
//(rear+maxsize-front)%maxsize
for (int i=front;i<front+size();i++)
{
System.out.print("a["+i%MaxSize+"]:"+arr[i % MaxSize]+" ");
}
System.out.println();
}
//
public int size(){
return (rear+MaxSize-front)%MaxSize;
}
// ,
public int headQueue(){
if (issEmpty())
{
System.out.println(" ");
throw new RuntimeException(" ");
}
return arr[front];
}
}
다음 코드 로 조작 할 수 있 습 니 다:
circleArray queue = new circleArray(4); // 4, 3
char key = ' '; //
Scanner scanner = new Scanner(System.in);//
boolean loop = true;
//
while(loop) {
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();
loop = false;
break;
default:
break;
}
}
System.out.println(" ~~");
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.