队列的数组实现与栈的实现很相似,不过因为队列是数据先入先出,所以要从数组的两端进行操作。
具体代码如下:
package com.neu.structure;
public class Queue<E> {
private Object[] arr;
private int maxsize;
private int front;
private int rear;
int size;
//构造方法
public Queue(int capacity) {
maxsize = capacity;
arr = new Object[capacity];
front = 0;
rear = -1;
size = 0;
}
//判断是否满队列
public boolean isFull() {
return size ==maxsize;
}
//判断是否空队列
public boolean isEmpty() {
return size==0;
}
//数据添加
public void insert(Object value) {
if(isFull()) {
System.out.println("队列已满,添加失败");
}else {
//如果队列未满,分为两种情况 ,一种情况尾部指针已经指向最后一个元素
//另一种情况是尾部没有指向最后一个元素
if(rear == maxsize-1) {
rear = -1;
}
arr[++rear] = value;
size++;//队列中实际个数加1
}
}
//取出数据
public Object remove() {
Object value = arr[front];
if(front==maxsize-1) {
front=-1;
}
size--;
front++;
return value;
}
//查看队列底数据
public Object peekFront() {
return arr[front];
}
//获得队列中的数据个数
public int getSize() {
return size;
}
}
再创建一个测试类进行测试:
package com.neu.structure;
public class Tesst3 {
public static void main(String[] args) {
Queue<String> que = new Queue<String>(6);
que.insert("a");
que.insert("b");
que.insert("c");
que.insert("d");
que.insert("e");
que.insert("f");
que.insert("g");
que.insert("h");
System.out.println(que.getSize());
while(!que.isEmpty()) {
System.out.println(que.remove());
}
System.out.println(que.isEmpty());
}
}
以上就是队列的数组实现方法。