队列是一种“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];
}
}
分享到:
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/1665616
普通队列 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数中组元素中,否则无法存入数据。rear==maxSize-1[队列满] 环形队列 1)front变量的...
主要介绍了Java数组队列概念与用法,结合实例形式分析了Java数组队列相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
队列是一种先入先出的数据结构(FIFO),只允许在前端(front)删除,在后端(rear)插入。容量为capacity大小的内存,只能存capacity-1的元素,其中rear的位置始终为空。 本文实现的队列,功能如下: 1 获取元素内容 ...
循环链表队列的代码实现 循环数组队列的代码实现
学习数据结构过程中,亲自在VC++上编译通过的使用数组实现队列的源代码,与大家共享。
主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。
NULL 博文链接:https://128kj.iteye.com/blog/1624362
Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息...
NULL 博文链接:https://shxin.iteye.com/blog/1948849
由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。
下面小编就为大家分享一篇基于Java数组实现循环队列的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
c++ 队列数组实现,这个简单的东西。队列的数组实现
配套代码讲解:https://blog.csdn.net/songchuwang1868/article/details/90200251 ...同步队列-无锁队列-循环数组无锁队列 同步队列-无锁队列-循环数组无锁队列 同步队列-无锁队列-循环数组无锁队列
这是一个java队列实现的全部工程文件,包含了所有代码,具体的设计文档在上传的另外文件中。这个工程能够实现所有队列的操作,运行没有问题。设计的是在应用程序上的基于界面的队列操作的实现。
更好了解数组和队列在C++应用开发当中使用,明白C++的变量内存结构。
队列,包含了数组队列,环形队列,在队列中,使用很多问题,得到了很多好的应用,对于后面集中地应用有好处
java队列实现(顺序队列、链式队列、循环队列)
通过不断地修改命名规范、程序逻辑等毛病 ,终于算完成了。这算是我第一个比较认真的小程序吧!仍需努力啊。