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()+" ");//出栈 } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Stay Hungry, Stay Foolish, Walking in Life