队列是一种“FIFO”先进先出的数据结构.可以想象每年在火车站中买票的人群所组成的"队列"。
|队员1 队员2 队员3 队员3 队员4 队员5 队员6 队员7 队员8|
^ ^
想象两个指针 一个指向队头 一个指向队尾,加人到队列中是从队尾入的,出队是从队头出队的。
队列接口:
/**
* 队列FIFO的接口
*
* @author 鼎鼎
*
* @param <E>
*/
public interface Queue<E> {
/**
* 入队: 从队尾加入一元素
*
* @param target
*/
public void add(E target);
/**
* 出队: 移走队头元素
*
* @param target
* @return 当前队头元素
*/
public E remove();
/**
* 当前队列中的元素个数
*/
public int size();
/**
* 判断当前队列是否为空
*
* @return
*/
public boolean isEmpty();
/**
* 只是返回队头元素
* @return
*/
public E front();
}
数组队列的代码实现:
public class ArrayQueue<E> implements Queue<E> {
private E[] data;
// 当前队列中元素的大小
private int size;
private int front;
private int rear;
public ArrayQueue() {
data = (E[]) new Object[20];
size = 0;
front = 0;
rear = 0;
}
public void add(E target) {
if (isFull()) {
enlarge();
//数组队列满后,需要扩充,记住扩充后要将front的值归0
front=0;
}
rear = (front + size) % data.length;
data[rear] = target;
size++;
}
public boolean isEmpty() {
return size == 0;
}
/**
* 判断当前队列是否已满
*
* @return
*/
public boolean isFull() {
return size == data.length;
}
/**
* 将数组容量扩大两倍
*
*/
public void enlarge() {
E[] newData = (E[]) new Object[data.length * 2];
for (int i = 0; i < data.length; i++) {
newData[i] = data[i];
}
data = newData;
newData = null;
}
public E remove() {
if (isEmpty()) {
throw new RuntimeException("队列为空!");
}
E tempData = data[front];
data[front] = null;
front = (front + 1) % (data.length);
size--;
return tempData;
}
public int size() {
return size;
}
public E front() {
if (isEmpty()) {
throw new RuntimeException("队列为空!");
}
return data[front];
}
}
分享到:
相关推荐
Java数组队列是一种基于数组实现的线性数据结构,它遵循先进先出(FIFO,First In First Out)的原则。在Java中,数组队列通常用于处理数据的顺序处理,例如任务调度、消息传递等场景。以下是关于Java数组队列的一些...
在Java编程中,队列是一种线性数据结构,它遵循先进先出...在实际项目中,应根据需求选择合适的数据结构,例如,如果性能是关键,那么自定义的数组队列可能更有优势;如果需要线程安全,`Vector`则是一个不错的选择。
Java 中可以使用 ArrayQueue 类来实现顺序队列。 ArrayQueue 类提供了多种构造方法,可以根据需要选择合适的构造方法来创建顺序队列。 ArrayQueue 类的方法包括: * size():获取队列的大小 * offer():添加元素...
`ArrayQueue` 类展示了如何创建一个基于数组的顺序队列。该类包含以下几个核心成员: 1. `maxSize`:存储队列的最大容量。 2. `front` 和 `rear`:分别记录队首和队尾的索引位置,初始化时设为 -1。 3. `arr`:用于...
java使用数组模拟普通队列
在这个例子中,我们使用 Java 语言实现了队列式分支限界法来解决布线问题。首先,我们定义了一个 Position 类,用于表示网格中的一个节点。然后,我们定义了一个队列 que,用于存储当前活动节点的周围节点。 在 ...
在提供的代码示例中,`ArrayQueue`类被创建来实现一个简单的顺序队列。这个类包含了一个泛型数组`arr`,用于存储队列中的元素,以及两个整型变量`front`和`rear`,分别表示队头和队尾的位置。`Sequeue`类作为顺序...
在 Java 语言中,可以使用数组来实现队列,例如: ```java public class ArrayQueue { private String[] items; private int n = 0; private int head = 0; private int tail = 0; public ArrayQueue(int ...
- **解释**:这段代码定义了一个基于数组的队列类`ArrayQueue`。`enqueue`方法用于将元素加入队列尾部,`dequeue`方法用于从队列头部移除元素。当`tail`等于数组大小`n`时,队列已满,无法再加入新元素;当`head`...
"数组实现栈和队列" 在计算机科学中,栈和队列是两种基本的数据结构,它们广泛应用于各种编程语言和算法中。数组是一种基本的数据结构,可以用来实现栈和队列。本文将详细介绍如何使用数组实现栈和队列。 数组实现...
Vector在Java等编程语言中是一种动态数组,它提供了线程安全的增删改查操作。由于它是数组的扩展,因此可以随机访问任何位置的元素,但插入和删除元素时可能需要移动大量元素,效率相对较低。 2. **List**: List...
"ArrayQueue.java"可能是基于数组的普通队列实现。"Queue.java"可能是一个抽象类或者接口,定义了队列的基本操作。"Main.java"是主程序,用于测试和展示这些数据结构的功能。"QueueDoc.java"可能是队列类的文档注释...
本篇文章将深入探讨队列这一基本的数据结构,并通过Java实现一个简单的数组模拟队列,以帮助读者理解其工作原理。 队列是线性数据结构的一种特殊形式,它遵循“先进先出”(First In First Out,简称FIFO)的原则。...
3. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,而队列则是先进先出(FIFO)的。它们在很多算法中都有应用,如递归、回溯和缓存管理。书中会讲解ArrayStack和LinkedListStack的实现,以及ArrayQueue和...
Java的LinkedList类也可用于实现队列,或者使用Queue接口的实现类,如ArrayQueue。源码可能包含了入队、出队的操作。 5. **树**:树是一种非线性数据结构,包括二叉树、平衡树(如AVL树、红黑树)等。二叉树常用于...
2. 栈和队列的Java实现,可能包括ArrayStack、LinkedListStack、ArrayQueue、LinkedListQueue等。 3. 二叉树的构造与遍历,如前序、中序、后序遍历,以及平衡树的调整。 4. 图的表示方法(邻接矩阵、邻接表)及图的...
队列可能是ArrayQueue或LinkedQueue;哈希表通常用HashMap或HashSet来表示。此外,还会涉及到排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序等。 算法是解决问题的步骤和策略。在Java中...
书中会介绍ArrayStack和ArrayQueue的实现。 4. **集合框架**:Java集合框架是Java库的核心部分,包括List、Set、Map接口及其实现类。ArrayList、LinkedList、HashSet、HashMap等的内部工作原理和使用场景是重点。 ...
对于队列,可能有`ArrayQueue`和`LinkedListQueue`的实现。此外,可能会有关于树(如二叉搜索树、AVL树、红黑树)和图(邻接矩阵、邻接表)的实现。 在学习过程中,测试是必不可少的。这个资源可能包含了针对每种...