요리사 해 우 - 데이터 구조 (3) 의 배열 시 뮬 레이 션 링 대기 열

1. 배열 시 뮬 레이 션 링 대기 열
1. 정의
링 대기 열 은 개인의 굵 은 이해 로 반복 적 으로 사용 할 수 있 습 니 다. 지난 번 에 쓴 데이터 시 뮬 레이 션 대기 열 은 일회 성 대기 열 로 사용 하면 사용 할 수 없습니다. 링 대기 열 은 데 이 터 를 꺼 낸 후에 여가 시간 을 반복 적 으로 이용 할 수 있 습 니 다.
2. 예 를 들 어
사용 가능
2 이미 사용
3 이미 사용
 
3. 코드 샘플
 public static void main(String[] args) {

        //        
        CircleQueue queue = new CircleQueue(4);

        char key = ' ';
        boolean loop = true;

        Scanner sc = new Scanner(System.in);
        while (loop) {
            System.out.println("s(show)    ");
            System.out.println("a(add)    ");
            System.out.println("g(get)    ");
            System.out.println("h(head)    ");
            System.out.println("e(exist)    ");
            key = sc.next().charAt(0);//      
            switch (key) {
                case 's':
                    queue.showQueue();
                    break;
                case 'g':
                    try {
                        int v = queue.getQueue();
                        System.out.printf("     :%d
", v); } catch (Exception e) { System.out.println(e.getMessage()); } break; case 'a': System.out.println(" "); int value = sc.nextInt(); queue.addQueue(value); break; case 'h': int h = queue.headQueue(); System.out.printf(" :%d
", h); break; case 'e': loop = false; break; } } } } class CircleQueue { private int maxSize; // private int front; // private int rear; // private int[] arr; // public CircleQueue(int maxSize) { this.maxSize = maxSize; this.arr = new int[maxSize]; } // public void showQueue() { if (rear == front) { System.out.println(" "); return; } /** * front , front + ? , front */ for (int i = front; i < front + size(); i++) { System.out.printf("arr[%d] = %d
", i % maxSize, arr[i % maxSize]); } } // public boolean addQueue(int ele) { if ((rear + 1) % maxSize == front) { System.out.println(" "); return false; } arr[rear] = ele; rear = (rear + 1) % maxSize; return true; } // public int getQueue() { if (rear == front) { throw new RuntimeException(" "); } int value = arr[front]; front = (front + 1) % maxSize; return value; } // public int headQueue() { isNull(); return arr[front]; } public void isNull() { if (rear == front) { throw new RuntimeException(" "); } } /** * * * @return */ public int size() { /** * rear = 3 * maxSize = 3 * front = 0 */ return (rear + maxSize - front) % maxSize; }

좋은 웹페이지 즐겨찾기