循环队列,重点是队空 或 队满 的判断。
/**
* 循环队列,重点是队空 或 队满 的判断
*/
public class QueueDemo {
private static int maxSize = 5;
private Object[] array;
private int front; //队头
private int rear; //队尾
private int nItems = 0;
public QueueDemo(){
this(maxSize);
}
private QueueDemo(int size){
int front = 0;
int rear = 0;
array = new Object[size];
}
public void insert(Object obj){
if(rear + 1 % maxSize == front){
System.out.println("队列满。");
return;
}
/*if(rear + 1 == maxSize)
rear = 0;*/
array[rear] = obj;
nItems++;
if(this.isFull()){
throw new RuntimeException("队列满==========");
}
rear = (rear + 1) % maxSize;
}
public Object remove(){
if( rear == front){
throw new RuntimeException("队列空==========");
}
Object obj = array[front];
front = (front + 1) % maxSize;
nItems--;
return obj;
}
public Object peek(){
Object obj = array[front];
return obj;
}
public boolean isFull(){
boolean flag = false;
if(nItems >= maxSize)
flag = true;
return flag;
}
public boolean isEmpty(){
boolean flag = false;
if(nItems == 0)
flag = true;
return flag;
}
public int size(){
return nItems;
}
public void display(){
while(nItems > 0){
Object obj = this.remove();
System.out.println("-->" + obj);
}
}
public static void main(String[] args){
QueueDemo queue = new QueueDemo();
/*测试1 队列满
queue.insert("a");
queue.insert("b");
queue.insert("c");
queue.insert("d");
queue.insert("e");
queue.insert("f");
*/
/*测试2 队列空*/
queue.insert("a");
queue.insert("b");
queue.remove();
queue.remove();
queue.remove();
// queue.display();
System.out.println(queue);
System.out.println("end========");
}
}