标签:Java 队列 param element Queue tail 循环 front
基本概念
队列:一种先进先出(First In First Out,FIFO)的数据结构。其来自于我们日常生活中的排队问题,排在前面的先获得服务。
循环队列:长度固定的队列。其优势是循环利用内存资源,入队和出队都是O(1)的时间复杂度。通常,我们使用一个数组来实现循环队列,对头通过front指针标记,对尾通过tail指针标记。当front = tail时,队列为空;当tail + 1 = head时,队列为满。
基于这些约定,就可以编程实现循环队列了。
Java实现
抽象出队列接口。
/**
* A First In Fist Out (FIFO) data structure.
*
* @author Xingjian
* @since 2019/09/20
* @param <T> element type
*/
public interface Queue<T> {
/**
* add element to Queue.
*
* @param element
* @return true, element added successfully. Otherwise,false.
*/
boolean enQueue(T element);
/**
* get element from Queue.
*
* @return element, removed from Queue.Or null if Queue is empty.
*/
T deQueue();
/**
* test whether this Queue is empty.
*
* @return true, if Queue is empty. Otherwise,false.
*/
boolean isEmpty();
}
循环队列实现。
/**
* Circular Queue implementation.
*
* @author Xingjian
* @since 2019/09/20
* @param <T> element type
*/
public class CircularQueue<T> implements Queue<T> {
/**
* element stored in this array.
*/
private T elements[];
/***
* front pointer.
*/
private int front;
/**
* tail pointer.
*/
private int tail;
/**
* construct a Circular Queue with given length.
*
* @param length
*/
@SuppressWarnings("unchecked")
public CircularQueue(int length) {
if (length <= 0) {
throw new IllegalArgumentException("length must be a positive integer.");
}
this.elements = (T[]) new Object[length];
this.front = 0;
this.tail = 0;
}
@Override
public boolean enQueue(T element) {
if ((tail + 1) % elements.length == front) {
// there is no space to add element.
return false;
}
elements[tail] = element;
tail = (tail + 1) % elements.length;
return true;
}
@Override
public T deQueue() {
if (isEmpty()) {
return null;
}
T e = elements[front];
front = (front + 1) % elements.length;
return e;
}
@Override
public boolean isEmpty() {
return front == tail;
}
}
标签:Java,队列,param,element,Queue,tail,循环,front 来源: https://blog.csdn.net/Tendency_Yang/article/details/101063847
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。