关于java:java实现环形队列

6次阅读

共计 1655 个字符,预计需要花费 5 分钟才能阅读完成。

环形队列

  • 队列是一种先进先出的数据结构

代码思路

  • 用数组寄存队列的数据
  • front 指向队首元素
  • rear 指向队尾元素
  • num 寄存以后曾经存在的元素个数,有了 num,判断队列是否为空是否存满比拟不便
public class Demo2 {public static void main(String[] args) {ArrayQueue queue = new ArrayQueue(5);
        queue.addNum(10001);
        queue.addNum(10002);
        queue.addNum(10003);
        queue.addNum(10004);
        queue.addNum(10005);
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
        queue.addNum(1);
        queue.addNum(2);
        queue.addNum(3);
        queue.showQueue();
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
        System.out.println(queue.getNum());
    }
}

class ArrayQueue {
    // 队列的大小
    int maxSize;
    // 用数组来实现队列
    int[] arr;
    // 指向队列首元素
    int front;
    // 指向队列尾元素
    int rear;
    // 以后队列的元素的个数
    int num;

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        this.arr = new int[this.maxSize];
        front = -1;
        rear = -1;
    }


    public boolean isFull() {return num == maxSize;}


    public boolean isEmpty() {return num == 0;}


    public void addNum(int num) {if (isFull()) {System.out.println("队列已满,无奈在进行入队操作");
            return;
        }
        // 队尾标记后移,指向要放入的元素的地位
        if (front == -1 && rear == -1) {
            front = 0;
            rear = 0;
        } else {rear = rear + 1;}
        if (rear == maxSize) {rear = 0;}
        arr[rear] = num;
        this.num++;
    }

    public int getNum() {if (isEmpty()) {throw new RuntimeException("队列为空,无奈出队");
        }
        // 队首标记后移,指向队首元素
        System.out.print("出队元素是:");
        this.num--;
        int res = arr[front];
        front++;
        if (front == maxSize) {front = 0;}
        return res;
    }

    public void showQueue() {if (isEmpty()) {throw new RuntimeException("队列为空,无奈遍历");
        }
        System.out.println("遍历队列");
        if (rear >= front) {for (int start = front; start <= rear; start++) {System.out.println(arr[start]);
            }
        } else {for (int start = front; start <= maxSize - 1; start++) {System.out.println(arr[start]);
            }
            for (int start = 0; start <= rear; start++) {System.out.println(arr[start]);
            }
        }
    }
}
正文完
 0