在这个实例中,我们将学习用Java实现队列数据结构。
要了解此示例,请确保您首先访问以下教程,
示例1:实现堆栈的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实现了队列数据结构。
示例2:使用Queue接口实现堆栈
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。例如,