/**
* 基于数组的队列(循环队列)
* 队空判断:front == rear
* 队满判断:(rear+1) % maxsize == front
* 队头指针进1:front = (front+1)%maxsize
* 队尾指针进1:rear = (rear+1)%maxsize
* 队列元素个数:(rear-front+maxsize)%maxsize*/
public class QueueUseArray {
private Object[] objs;
private int front; //队头
private int rear; //队尾
private int size; //队列中元素个数
private int maxSize; //数组的最大长度
public QueueUseArray (int maxsize) {
objs = new Object[maxsize];
this.front = 0;
this.rear = 0;
this.size = 0;
this.maxSize = maxsize;
}
/**若队列不满obj进队*/
public boolean push(Object obj) {
if ((rear+1) % maxSize == front ) {//判断队列满否
return false;
}
objs[rear] = obj; //按照队尾指针指示位置插入
rear = (rear+1) % maxSize;//队尾指针加一
size++; //队列里面的元素数加一
return true;
}
/**若队列不空则函数退掉一个队头元素*/
public Object pop() throws Exception {
if (front == rear) { // 若队列为空则删除失败
throw new Exception("The Queue is empty!");
}
Object temp = objs[front];
front = (front+1) % maxSize;//队头指针加一
size--;
return temp;
}
/**若队列不空则返回队头元素的值*/
public Object peek() throws Exception {
if (front == rear) {
throw new Exception("The Queue is empty!");
}
return objs[front];
}
/**求队列中元素的个数*/
public int Size() {
//return (rear - front + maxSize) % maxSize;//也可以,但是我们在加元素和删除元素的时候已经统计了元素数量,所以直接返回size即可
return size;
}
public static void main(String[] args) throws Exception {
QueueUseArray queueUseArray = new QueueUseArray(5);
for (int i = 0; i < 5; i++) {
queueUseArray.push(i);
}
System.out.println(queueUseArray.push(6));
System.out.println(queueUseArray.pop());
System.out.println(queueUseArray.pop());
}
}
队列——数组存储结构JAVA
最新推荐文章于 2024-01-17 17:40:18 发布