아날로그 순환 큐 어레이 (자바 구현)

1.front 변수를 의미 앞 포인트 큐의 첫 번째 요소, 즉 ARR [앞] 큐 앞 초기 값 = 0의 첫번째 요소이다.

 

2.rear 변수를 의미 : 후면 점을 큐의 마지막 요소 다음 위치로 당신이 예약 된 공간으로 빈 공간을 원하기 때문에. 후방 = 0의 초기 값이다.

 

3. 큐 단, 차면 (후면 +1) %의 전면 MAXSIZE = [전체].

 

4. 대기열 비어있는 상태, 비어있는 후방 == 정면.

 

(5) 우리가 이러한 방식으로 분석 대기열의 유효 데이터의 수 (+ REAR-MAXSIZE 전면) MAXSIZE의 % .

 
공용  클래스 CircleArrayQueue {
     공공  정적  무효 메인 (문자열 []에 args) {
        에서 System.out.println ( "테스트 아날로그 순환 큐 어레이" );
        AQ의 circlearrqueue = 새로운 새 circlearrqueue (3. )
         문자 키 = ''; // 사용자 입력받는 
        스캐너 스캐너 = 새로운 새로운 스캐너합니다 (System.in를)
         부울 루프 = ;
         // 출력 메뉴 갖는다 
        그동안 (루프) {
            에서 System.out.println ( "S (쇼) : 큐 표시" );
            에서 System.out.println ( "E (종료) : 프로그램을 종료합니다" );
            에서 System.out.println ( "A (추가) : 큐에 데이터를 추가" );
            에서 System.out.println ( "H (ehead) : 데이터 대기열 헤드보기" );
            에서 System.out.println ( "G (GET)는 : 데이터 큐 헤드 제거" ); . Scanner.next는 = ()는 수 charAt (0); // 문자 받아 
            스위치 {(키)
                 케이스 'S'를 :
                    aq.showQueue ();
                    휴식 ;
                경우 'A' :
                    에서 System.out.println ( "출력의 숫자" )
                     INT의 값 = scanner.nextInt ();
                    aq.addQueue (값);
                    휴식 ;
                케이스 'g' :
                     시도 {
                         INT 입술 = aq.getQueue ();
                        System.out.printf ( "추출 된 데이터를 D % \ N-" , RES);
                    } 캐치 (예외 전자) {
                        에서 System.out.println (e.getMessage ());
                    }
                    BREAK ;
                 케이스 'H': // 큐의보기 헤드 
                    은 try {
                         INT RES = aq.headQueue ();
                        System.out.printf는 ( "큐의 헤드 데이터는 D % \ N-" , RES);
                    } 캐치 (예외 전자) {
                        에서 System.out.println (e.getMessage ());
                    }
                    휴식 ;
                경우 'E': // 退出
                    scanner.close ();
                    루프 = 거짓 ;
                    휴식 ;
                기본값 :
                     휴식 ;
            }
        }
        에서 System.out.println ( "종료된다" );
    }
}

클래스 circlearrqueue {
     개인  의 INT MAXSIZE는; //는 큐 길이 나타내는 
    개인  INT 전방 // 큐 헤드 
    전용  INT REAR; // 큐의 끝 
    개인  지능 [] ARR; // 이 어레이는 데이터를 저장하는 데 사용되는 
    공용 (circlearrqueue를 INT arrMaxSize) {
        MAXSIZE = arrMaxSize;
        도착 = 새로운  INT [MAXSIZE];
    }
    공개  부울 isFull () {
          (후면 + 1) %의 MAXSIZE == 전면;
    }
    공개  부울 IsEmpty 함수는 () {
         반환 == 후면을 전면;
    }
    공공  무효 addQueue ( INT N-) {
         // 큐가 가득 여부를 
        IF (isFull ()) {
            에서 System.out.println는 ( "큐는 가입 할 수 없습니다, 가득" )
             반환 ;
        }
        ARR [REAR] = N-; // 직접 데이터를 추가 
        REAR = (REAR + 1). %의 MAXSIZE;
    }

    공공  INT getQueue () {
         // 큐가 비어 있는지 
        경우 (IsEmpty 함수는 ()) {
             // 예외를 던져 
            던져  새로운 새로운 말고 RuntimeException을 ( "큐 비어, 데이터를받을 수 없어" );
        }
        // 이는 첫 번째 요소 큐 포인트의 전방을 분석 할 필요가있다
         // 임시 변수의 반환 값의 전면 후 임시 변수 시프트 3. 2.에서 예약 1. 제 앞의 값 
        INT의 값 = ARR [앞];
        전면 = (전방 + 1) %의 MAXSIZE;
        반환 값을;
    }
    공공  무효 showQueue () {
         // 반복 처리 
        IF (IsEmpty 함수 ()) {
            에서 System.out.println ( "큐가 비어있는, 데이터가" );
             반환하지 ;
        }
        // 전면에서 통과 시작, 얼마나 많은 요소를 통과하는? 
        위한 (이 값 int I =에게 전면; I)는 (전면 + 크기 <; I는 ++ ) {
            System.out.printf는 ( "[%의 D] D = % \ 없음을, 언"I % MAXSIZE, 도착 [I의 %의 MAXSIZE]);
        }
    }
    // 열 현재 유효 숫자의 개수 획득 
    공중  INT의 크기 () {
          (+ REAR-MAXSIZE 전면) %의 MAXSIZE 단계;
    }
    공공  INT headQueue () {
         // 분석 
        IF (IsEmpty 함수 ()) {
             던져  새로운 새로운 말고 RuntimeException ( "큐가 비어있는, 데이터 없음" );
        }
        반환 도착 [앞];
    }

}

 

추천

출처www.cnblogs.com/GEMyd/p/11647253.html