큐에 배열을 사용하여

com.atguigu.queue 포장재 

오기 java.util.Scanner; 

Public 클래스 CircleArrayQueueDemo { 

   공공 정적 무효 메인 (문자열 []에 args) { 
      
      //을 테스트 
      의에서 System.out.println ( "테스트 케이스 환형 어레이 아날로그 큐 ~ ~ "); 
      
      // 순환 큐 생성 
      CircleArray 큐 = 새로운 CircleArray (4) ; // . 최대 유효 데이터 큐 3 기술 집합 4 
      문자 키 = '', 사용자 입력을 수신 // 
      스캐너 스캐너 = 새로운 스캐너 ( System.in); // 
      부울 = true로 루프; 
      // 출력 메뉴 
      그동안 (루프) { 
         에서 System.out.println ( "S (표시) 표시 큐") 
         에서 System.out.println ( "E (출구) : "); 프로그램을 종료 
         에서 System.out.println ("A (추가)를 : 추가 데이터를 대기열에 "); 
         에서 System.out.println ("G (GET) : 큐 ")에서 가져온 데이터;
         에서 System.out.println ( "H (머리) : 참조 데이터 큐 헤드"); 
               은 System.out.에 println (e.getMessage ());
         키 scanner.next = () 수 charAt (0 ); //이 . 캐릭터를 수신 
         스위치 (키) { 
         케이스 'S': 
            queue.showQueue (); 
            BREAK; 
         케이스 'A' 
            에서 System.out.println ( "a의 출력 숫자 "); 
            INT scanner.nextInt 값 = (); 
            queue.addQueue (값) 
            BREAK; 
         케이스 'G': // 추출한 데이터 
            은 try { 
               INT queue.getQueue RES = (); 
               System.out.printf ("삭제 데이터 D % \ N- "RES) 
            } 캐치 (예외 E) { 
               // TODO : 예외 핸들 
            } 
            BREAK; 
         케이스 'H':// 확인 데이터 큐 헤드 
            시도 { 
               INT queue.headQueue RES = (); 
               System.out.printf는 (RES "큐 데이터의 헤드 D % \ N-이다"); 
            } 캐치 (예외 E) { 
               // TODO : 예외 핸들 
               은 System.out. println 메소드 (e.getMessage ()); 
            } 
            BREAK; 
         케이스 'E': // 종료 
            scanner.close (); 
            루프 = false로, 
            BREAK, 
         기본 : 
            BREAK; 
         } 
      } 
      에서 System.out.println ( "프로그램이 종료 ~~" ) 
   }는 

} 


클래스 CircleArray { 
   개인 INT이 maxSize는 // 어레이의 최대 용량을 나타낸다 
   // 프런트 조절 변수 의미합니다, 즉 [앞] 큐의 첫 번째 요소는 큐의 첫 번째 요소 앞에 점이다 ARR 
   초기 값 = 0 // 전면 
   개인 INT 프론트; 
   // 변수 REAR 조정 의미합니다. 큐의 마지막 요소 이후 후방 지점 비어 있기 때문에 소정의 규칙으로 공간 
   @ 뒤 초기 값 = 0 
   개인 INT 후방 상기 큐의 끝 // 
   전용 INT [] 도착; //이 데이터는 저장 데이터 큐 아날로그로 사용되는 
   
   공용 CircleArray (INT arrMaxSize) { 
      상기 maxSize를 = arrMaxSize 
      ; ARR = 새로운 새 INT는 [이 maxSize] 
   } 
   
   // 큐인지 전체 
   공개 부울 isFull () { 
      창 (. REAR + 1) % == 정면이 maxSize; 
   } 
   
   // 큐가 비어 있는지 여부를 
   공개 부울 IsEmpty 함수 () { 
      REAR == 전면 반환; 
   } 
   
   큐에 데이터를 추가 // 
   공개 무효 addQueue (INT 않음) { 
      // 큐 풀인지를 판단 
      하는 경우 (isFull ( )) { 
         에서 System.out.println ()는 "큐가 가득 ~ 데이터를 추가 할 수없는"; 
         복귀;
      } 
      // 데이터를 직접 첨가 
      ARR [후방] = N-, 
      후방 시프트 한 후,이 고려되어야 // 모듈 
      후방 = (+ 후방 1이다.)이이 maxSize의 %를; 
   } 
   
   // 데이터 큐, 큐 얻을 
   getQueue INT 공개 ( ) { 
      // 큐가 비어 있는지 
      만약에 (IsEmpty 함수 ()) { 
         // 던져 예외는 
         새로운 RuntimeException을 던져 () "큐가 비어있는 데이터가 걸릴 수 없습니다"; 
      } 
      // 여기 큐의 전면을 구문 분석에 관한 것이다 소자 
      // 1. 제 앞에 임시 변수에 대응하는 값으로 유지 
      모듈로 간주 전방 시프트 후의 // 2, 
      // 3 임시 저장된 변수 리턴 
      int 값 = ARR [앞] 
      앞을 = (전방 . + 1)가이 maxSize % 
      리턴 값; 

   } 
      // 대하여 반복
    
   모든 데이터 큐를 표시 //
   무효 showQueue 공개 () { 
      되는 경우 (IsEmpty 함수 ()) {
      IF는 (IsEmpty 함수는 ()) { 
         에서 System.out.println이 ( "큐가 비어있는, 데이터가없는 ~"); 
         반환; 
      } 
      // 아이디어 : 전면, 횡단 요소의 수를 가로 지르는 
      // 머리 
      를 들어 (INT I = 전면; I <전면 + 사이즈 (); I ++) { 
         System.out.printf ( "ARR [D %의] D = % \ N-"은이 maxSize I %이고, ARR [i를이 maxSize의 %]); 
      } 
   } 
   
   // 결정된 활성 데이터의 현재 수는 큐 
   공개 INT 크기 ()는 { 
      // REAR = 2 
      // = 전면 1. 
      // = maxSize를 3. 
      리턴합니다 (maxSize를 REAR + - 전면)에이 maxSize의 %는;    
   } 
   
   // 데이터 큐 헤드를 표시 한 관심은없는 데이터가 촬영 한 
   공공 INT의 headQueue을 () { 
      // 분석 
      }
         새로운 RuntimeException을 던져 ( "큐가 비어있는, 데이터가없는 ~");
      도착 [앞] 리턴; 
   } 
}
게시 된 316 개 원래 기사 · 원의 찬양 (33) · 전망 (210) 000 +

추천

출처blog.csdn.net/yz18931904/article/details/104177179