image.png

    1. //环形队列
    2. @Data
    3. public class RingQueue {
    4. private int front; //队列头
    5. private int rear; //队列尾巴
    6. private int[] array;
    7. private int maxSize; //数组最大容量
    8. public RingQueue(int maxSize){
    9. array = new int[maxSize];
    10. setMaxSize(maxSize+1);
    11. }
    12. //添加
    13. public void add(int number){
    14. //满了
    15. if(isFull()){
    16. System.out.println("队列已经满了");
    17. return;
    18. }
    19. System.out.println("添加数据: "+number);
    20. array[rear] = number;
    21. rear = (rear +1) % maxSize;
    22. }
    23. //获取
    24. public void get(){
    25. //判断是否为空
    26. if(isNull()){
    27. System.out.println("队列中没有数据了");
    28. return;
    29. }
    30. System.out.println("获取数据: "+array[front]);
    31. front = (front + 1) % maxSize;
    32. }
    33. //查看数据
    34. public void view(){
    35. if(isNull()){
    36. System.out.println("暂时没有数据");
    37. return;
    38. }
    39. int index =front;
    40. System.out.println();
    41. System.out.println("展示数据开始________________");
    42. for (int i = 0; i < size() ; i++) {
    43. System.out.println(i+": "+ array[index]);
    44. index = (index +1) % maxSize;
    45. }
    46. System.out.println("展示数据结束________________");
    47. System.out.println();
    48. }
    49. //获取当前队列中有效数据个数
    50. public int size(){
    51. return (rear + maxSize - front) % maxSize;
    52. }
    53. //判断队列是否已满
    54. public boolean isFull(){
    55. return (rear+1) % maxSize == front;
    56. }
    57. //判断队列是否为空
    58. public boolean isNull(){
    59. return rear == front;
    60. }
    61. }
    • 测试 ```java {
    1. RingQueue ringQueue = new RingQueue(3);
    2. ringQueue.add(10);
    3. ringQueue.add(20);
    4. ringQueue.add(30);
    5. ringQueue.add(40);
    6. ringQueue.view();
    7. ringQueue.get();
    8. ringQueue.view();

    } ```