package com.ywx.count;
/**
* 循环队列操作:
* 入队时:将新元素插入rear所指的位置的后一位。
* 出队时:删去front所指的元素,然后将front加1并返回被删元素。
* @author Vashon
* date:20150402
* @param <T>
*/
public class CirQueue<T> {
T[] a; //对象数组,队列最多存储a.length-1个对象
//默认初始化大小
private static final int DEFAULT_SIZE=10;
int front;//首小标
int rear;//尾下标
public CirQueue(){
this(DEFAULT_SIZE);
}
/**
* 初始化指定长度的队列
* @param size
*/
@SuppressWarnings("unchecked")
public CirQueue(int size) {
a=(T[]) new Object[size];
front=0;
rear=0;
}
/**
* 将一个对象追加到队列的尾部
* @param obj
* @return 队列满是返回false,否则返回true
*/
public boolean enqueue(T obj){
if((rear+1)%a.length==front){
return false;
}else{
a[rear]=obj;
rear=(rear+1)%a.length;//取模后剩余的赋值给rear
return true;
}
}
/**
* 队列头部出栈
* 出栈要返回一个类型的实例内容
* @return
*/
public T dequeue(){
if(rear==front){
return null;
}else{
T obj=a[front];
front=(front+1)%a.length;
return obj;
}
}
/**
* 队列的长度
* @return
*/
public int size(){
if(rear>front){
return rear-front;//return (rear-front)&(a.length-1)
}else{
return a.length-1;
}
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpty(){
return rear==front;
}
public static void main(String args[]){
CirQueue<String> queue=new CirQueue<String>(4);
queue.enqueue("1");//入栈
queue.enqueue("2");//入栈
queue.enqueue("3");//入栈
queue.enqueue("4");//入栈
System.out.println("size="+queue.size());
int size=queue.size();
System.out.println("********出栈操作********");
for(int i=0;i<size;i++){
System.out.println(queue.dequeue()+" ");//出栈
}
}
}
循环队列操作
最新推荐文章于 2024-10-02 17:47:36 发布