1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| package queue;
import java.util.Scanner;
public class ArrayCircleQueue { public static void main(String args[]) { CircleArrayQueue cqueue = new CircleArrayQueue(5); char key = ' '; boolean loop = true; Scanner in = 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(exit):退出程序"); System.out.println("请选择操作:输入对应的字母"); key = in.next().charAt(0); switch(key) { case 's': try { cqueue.showQueue(); } catch(Exception e) { System.out.println(e.getMessage()); } break; case 'a': try { System.out.println("请输入要添加的数据:"); int value = in.nextInt(); cqueue.addQueue(value); } catch(Exception e) { System.out.println(e.getMessage()); } break; case 'g': try { System.out.println("您获取的数据是"+cqueue.getQueue()); } catch(Exception e) { System.out.println(e.getMessage()); } break; case 'h': try { System.out.println("您获取的数据是"+cqueue.getHead()); } catch(Exception e) { System.out.println(e.getMessage()); } break; case 'e': loop = false; in.close(); break; default: break; } } } }
class CircleArrayQueue { private int maxSize; private int front; private int rear; private int[] arr; public CircleArrayQueue(int amaxSize) { maxSize = amaxSize; arr = new int[maxSize]; front = 0; rear = 0; } public boolean isFull() { return (rear+1)%maxSize == front; } public boolean isEmpty() { return rear == front; } public int Arrcount() { return (rear - front + maxSize) % maxSize; } public void addQueue(int n) { if(isFull()) { System.out.println("队列满,不能添加数据"); return; } arr[rear] = n; rear = (rear+1) % maxSize; } public int getQueue() { if(isEmpty()) { throw new RuntimeException("队列空,不能取出数据"); } 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 +Arrcount(); i++ ) { System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i % maxSize]); } } public int getHead() { if(isEmpty()) { throw new RuntimeException("队列空,没有数据"); } return arr[front]; } }
|