在这个实例中,我们将学习用Java实现队列数据结构。
要了解此示例,请确保您首先访问以下教程,
public class Queue {
  int SIZE = 5;
  int items[] = new int[SIZE];
  int front, rear;
  Queue() {
    front = -1;
    rear = -1;
  }
  //检查队列是否已满
  boolean isFull() {
    if (front == 0 && rear == SIZE - 1) {
      return true;
    }
    return false;
  }
  //检查队列是否为空
  boolean isEmpty() {
    if (front == -1)
      return true;
    else
      return false;
  }
  //将元素插入队列
  void enQueue(int element) {
    //如果队列已满
    if (isFull()) {
      System.out.println("Queue is full");
    }
    else {
      if (front == -1) {
        //标记 front 表示队列的第一个元素
        front = 0;
      }
      rear++;
      //在后面插入元素
      items[rear] = element;
      System.out.println("Insert " + element);
    }
  }
  //从队列中删除元素
  int deQueue() {
    int element;
    //如果队列为空
    if (isEmpty()) {
      System.out.println("Queue is empty");
      return (-1);
    }
    else {
      //从队列前面删除元素
      element = items[front];
      //如果队列中只有一个元素
      if (front >= rear) {
        front = -1;
        rear = -1;
      }
      else {
        //将下一个元素标记为 front
        front++;
      }
      System.out.println( element + " Deleted");
      return (element);
    }
  }
  //显示队列元素
  void display() {
    int i;
    if (isEmpty()) {
      System.out.println("Empty Queue");
    }
    else {
      //显示队列的front
      System.out.println("\nFront index-> " + front);
      //显示队列的元素
      System.out.println("Items -> ");
      for (i = front; i <= rear; i++)
        System.out.print(items[i] + "  ");
      // 显示队列的尾部
      System.out.println("\nRear index-> " + rear);
    }
  }
  public static void main(String[] args) {
    //创建一个Queue类的对象
    Queue q = new Queue();
    //尝试从队列中删除元素
    // 当前队列为空
    // 因此无法删除
    q.deQueue();
    // 将元素插入队列
    for(int i = 1; i < 6; i ++) {
      q.enQueue(i);
    }
    // 无法将第6个元素添加到队列中,因为队列已满
    q.enQueue(6);
    q.display();
    // deQueue删除首先输入的元素,例如:1
    q.deQueue();
    //现在我们只有4个元素
    q.display();
  }
}输出结果
Queue is empty Insert 1 Insert 2 Insert 3 Insert 4 Insert 5 Queue is full Front index-> 0 Items -> 1 2 3 4 5 Rear index-> 4 1 Deleted Front index-> 1 Items -> 2 3 4 5 Rear index-> 4
在上面的示例中,我们已经用Java实现了队列数据结构。
Java提供了一个可用于实现队列的内置接口 Queue 。
import java.util.Queue;
import java.util.LinkedList;
class Main {
  public static void main(String[] args) {
    //使用LinkedList类创建队列
    Queue<Integer> numbers = new LinkedList<>();
    // enqueue
    //在队列尾部插入元素
    numbers.offer(1);
    numbers.offer(2);
    numbers.offer(3);
    System.out.println("Queue: " + numbers);
    // dequeue
    //从队列前面删除元素
    int removedNumber = numbers.poll();
    System.out.println("删除的元素: " + removedNumber);
    System.out.println("删除后排队: " + numbers);
    }
}输出结果
Queue: [1, 2, 3] 删除的元素: 1 删除后排队: [2, 3]
在上面的示例中,我们使用了Java的Queue接口以实现队列。在这里,我们使用了LinkedList实现Queue接口的类。
Numbers.offer() - 将元素插入到队列的末尾
Numbers.poll() - 从队列的最前面删除一个元素
注意,我们在创建队列时使用了尖括号<Integer>。它表示队列是泛型类型。要了解有关泛型的更多信息,请访问Java 泛型。
我们还可以使用其他接口和类代替Queue 和 LinkedList。例如,