public class QueueArray{
/** 数组 **/
private String[] arr;
/** 数组容量,队列就是在该数据上实现的,这个n标识的就是数据的大小。 和要实现的队列关系不大 **/
private int n;
/** 队列的开始角标 **/
private int head = 0;
/** 队列的末尾角标 + 1 **/
private int tail = 0;
/** 创建原始数据 **/
public QueueArray(int captity){
arr = new String[captity];
n = captity;
}
/** 入队列 **/
public boolean enqueue(String element){
if(tail == n){
/** 原始数据中的概念队列已经使用完毕 **/
if(head == 0){
/** 原始数据中已经全部被概念队列暂满,没有多余空间 **/
return false;
} else {
/** 开始放进去的元素已经有出队列的了**/
/** 这个时候需要挪一下队列在原始数组中的位置,参考后面的图 **/
for(int i = head; i < tail; i++){
arr[i - head] = arr[i];
/** 原来的arr[i]不需要 = null了,队列内的数据都会被替换,arr数据多余队列的数据可以不用care **/
}
tail = tail -head;
head = 0;
}
}
arr[tail] = element;
tail ++;
return true;
}
public String dequeue(){
if(head == tail){
/** 队列已经为null了 **/
return null;
}
String element = arr[head];
head ++;
return element;
}
}
概念队列使用完毕后,队列移动模型图;