Java를 사용하여 루프 큐를 구현하는 방법 :
1. 현재 요소 수를 기록하려면 속성 크기를 추가하십시오.
목적은 헤드 = 후방 일 때입니다. 크기 = 0 또는 크기 = 배열 길이별로. 대기열을 비어 있거나 대기열이 가득 찼습니다.
2. 배열 크기 -1 요소 만 배열에 저장되어 후면이 헤드와 동일하지 않도록합니다. 대기열이 가득 차면입니다. 후면+1 = 헤드, 중간에는 하나의 요소 만 있습니다.
후면 = 헤드. 대기열은 비어 있어야합니다.
대기열의 양쪽 끝에 합의 된 작업 유형은 다릅니다.
삭제할 수있는 끝은 팀의 헤드라고하며, 그러한 작업을 Dequeue라고도합니다.
삽입 할 수있는 끝을 팀의 꼬리라고하며 이러한 작업을 Enqueue라고도합니다.
대기열의 개략도
대기열을 구현할 때는 잘못된 오버플로 현상에주의를 기울여야합니다. 위의 마지막 그림에서 볼 수 있듯이.
그림에서 볼 수 있듯이 가짜 오버플로
솔루션 : 체인 저장을 사용하십시오. 순차적으로 저장 될 때. 우리의 일반적인 해결책은 그것을 끝에 연결하고 원형 대기열을 형성하는 것입니다. 이것은 대기열의 저장 공간을 최대한 활용합니다.
루프 큐 다이어그램 :
위 그림에서. 전면은 대기열의 첫 번째 요소를 가리 킵니다. 후면은 큐 끝에서 다음 위치를 가리 킵니다.
그러나 여전히 문제가 있습니다. 전면과 후면이 같은 위치를 가리킬 때, 이것은 팀이 비어 있거나 가득 차 있음을 의미합니까? 그러한 상황을 상상할 수 있습니다.
이 문제를 해결하기위한 일반적인 관행은 다음과 같습니다.
마크는 그러한 혼란스러운 상황을 구별하는 데 사용됩니다.
원소 공간을 희생하십시오. 전면과 후면이 같으면 비어 있습니다. 후면의 다음 위치가 앞면. 가득 차 있습니다.
예를 들어, 다음 그림은 다음과 같습니다.
아래에서 우리는 루프 대기열을 제공하고 다른 방법, 즉 비어있는 팀과 전체 팀을 구별하기 위해 요소 공간을 희생합니다.
몇 가지 핵심 사항 :
1. 프론트는 팀의 수장을 가리 킵니다. 후면은 팀의 끝에서 다음 위치를 가리 킵니다.
2. 팀이 비어 있다는 추론 : Front == 후면; 팀이 가득 차 있다는 추론 : (후면+1)%maxsize == Front.
java.io.*; 공개 클래스 queuearray {object [] a; // 객체 배열, 큐는 최대 A.length-1 객체 int 전면을 저장합니다. // 첫 번째 첨자 int 후면에서; // 최종 위시에서 공개 queuearray () {this (10); // 다른 생성자 호출} public queuearray (int size) {a = 새 개체 [크기]; 전면 = 0; 후면 = 0; } / *** 대기열의 끝에 객체를 추가하십시오* @param obj object* @return 큐가 가득 차면 거짓 Return False가 있습니다. } a [후면] = obj; 후면 = (후면+1)%A.length; 진실을 반환하십시오. } / *** 대기열의 헤드의 첫 번째 객체는 큐에 dequeued* @return 대기열이 비어있을 때 dequeued* / public object dequeue () {if (rear == front) {return null; } object obj = a [전면]; 전면 = (전면+1)%A.length; 반환 obj; } public static void main (String [] args) {QueueArray q = 새로운 queuearray (4); System.out.println (q.enqueue ( "Zhang San")); System.out.println (q.enqueue ( "li si")); System.out.println (q.enqueue ( "zhao wu")); System.out.println (q.enqueue ( "Wang Yi")); // 큐를 입력 할 수없고 큐가 가득 차 있습니다 (int i = 0; i <4; i ++) {System.out.println (q.dequeue ()); }}}Java 어레이를 기반으로 원형 대기열을 구현하는 두 가지 방법의 위의 요약은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.