📅  最后修改于: 2023-12-03 15:42:23.390000             🧑  作者: Mango
队列是一种基本的线性数据结构,它具有先进先出(FIFO)的特点。简单来说,就是先进入队列的元素先被取出,后进入的元素后被取出。
队列主要有两种实现方式:数组实现和链表实现。
数组实现的队列是通过数组来存储队列中的元素,同时使用两个指针 front
和 rear
分别指向队列的头部和尾部。
public class ArrayQueue {
private int[] array;
private int front;
private int rear;
private int capacity;
// 构造方法
public ArrayQueue(int size) {
array = new int[size];
capacity = size;
front = -1;
rear = -1;
}
// 判断队列是否为空
public boolean isEmpty() {
return (front == -1) || (front == rear + 1);
}
// 判断队列是否已满
public boolean isFull() {
return rear == capacity - 1;
}
// 入队
public void enqueue(int data) {
if (isFull()) {
System.out.println("队列已满!");
} else {
if (front == -1) {
front = 0;
}
rear++;
array[rear] = data;
}
}
// 出队
public int dequeue() {
int data = 0;
if (isEmpty()) {
System.out.println("队列为空!");
} else {
data = array[front];
front++;
}
return data;
}
}
链表实现的队列是通过链表来存储队列中的元素,同时使用两个指针 front
和 rear
分别指向队列的头部和尾部。
public class LinkedListQueue {
private Node front;
private Node rear;
// 构造方法
public LinkedListQueue() {
front = null;
rear = null;
}
// 判断队列是否为空
public boolean isEmpty() {
return (front == null) && (rear == null);
}
// 入队
public void enqueue(int data) {
Node newNode = new Node(data);
if (rear == null) {
front = rear = newNode;
} else {
rear.setNext(newNode);
rear = newNode;
}
}
// 出队
public int dequeue() {
int data;
if (isEmpty()) {
System.out.println("队列为空!");
return -1;
} else {
data = front.getData();
front = front.getNext();
if (front == null) {
rear = null;
}
return data;
}
}
// 内部类节点
class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
next = null;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
}
队列的应用非常广泛,特别是在处理一些与时间有关的问题时,例如:
队列数据结构是一种非常基础的数据结构,具有先进先出的特点,在实际应用中有着广泛的应用。我们可以利用数组或链表来实现队列,具体实现方式根据需求的不同而选择。