前段时间看各位博主写的java队列程序,在这里给出自己的解决方法,望借鉴。
//实现队列自定义, 还有点问题 /*对于队列来说,rear一直指向队尾要加入的一个元素,而不是已有的元素,所以在入队列时候,是先 data[rear]=obj,然后再rear++,指向下一个空位置; front则指向队列首元素,故在出队列时候,也是先obj=data[front],然后front++; size为队列的长度; MaxSize为队列所用数组的长度; 取首元素等操作时候用到data[(front+1)%data.length],front+1为正常data的下标,因为使用循环数组,故取余; 详见http://wenku.baidu.com/view/d69287a9d1f34693daef3e7a.html */ public class myQueue { /** * @param args */ private int front; private int rear; private int size; private Object[] data; public myQueue(int MaxSize) { front = rear = 0; data = new Object[MaxSize]; } public int getSize() { return size; } // 入队列,如果数组长度不够,就长度翻倍,先加元素再rear++,rear开始时候指向队尾的下一个元素位置 public void enter(Object o) { if (size >= data.length) { Object[] newdata = new Object[data.length * 2]; for (int i = 0; i < data.length; i++) { newdata[i] = data[i]; } data = newdata; } data[rear] = o; rear++; size++; } // 出队列,用front时候,要除以数组长度取余 public Object leave() throws Exception { Object o = null; if (size > 0) { o = data[front]; front = (front + 1) % data.length; size--; return o; } throw new Exception("队列为空"); } public Object peek() { if (size <= 0) { System.out.println("队列为空"); } return data[(front) % data.length]; } // rear=front则为空 public boolean isEmpty() { return rear == front; } public void clear() { front = rear = 0; } public static void main(String[] args) throws Exception { // TODO Auto-generated method stub myQueue mq = new myQueue(10); for (int i = 0; i < 10; i++) { mq.enter(i); } while (!mq.isEmpty()) { System.out.println(mq.leave()); } } }