링 큐 의 배열 구현 (JAVA)

링 큐 의 배열 구현 (JAVA)
대기 열 은 선진 적 인 선형 구조 이 고 링 구 조 는 대기 열 이 가득 찬 후에 데 이 터 를 꺼 내 면 꺼 낸 위치 에 데 이 터 를 계속 추가 할 수 있다.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; } }

일반 대기 열 은 링 과 비슷 합 니 다.

좋은 웹페이지 즐겨찾기