`
128kj
  • 浏览: 584691 次
  • 来自: ...
社区版块
存档分类
最新评论

用数组实现的循环队列(java)

阅读更多
循环队列能充分利用空间,解决队列假上溢现象。

import java.io.*;
public class QueueArray {   
    Object[] a; 
   /*对象数组,队列最多存储a.length-1个对象,浪费一个存储单元。这是因为如果将数组装满,则队列满和队列空的条件都是: rear=front
    *为了便于判断,将队列满的条件改为:(rear+1)%a.length=front,这样便要浪费一个存储单元。
    *队列空的条件仍是: rear=front
    */
    
    int front;  //队首下标   
    int rear;   //队尾下标   
    public QueueArray(){   
        this(10); //调用其它构造方法   
    }   
    public QueueArray(int size){   
        a = new Object[size];   
        front = 0;   
        rear =0;   
    }   
    /**  
     * 将一个对象追加到队列尾部  
     * @param obj 对象  
     * @return 队列满时返回false,否则返回true  
     */  
    public boolean enqueue(Object obj){   
        if((rear+1)%a.length==front){   
            return false;   
        }   
        a[rear]=obj;   
        rear = (rear+1)%a.length;   
        return true;   
    }   
    /**  
     * 队列头部的第一个对象出队  
     * @return 出队的对象,队列空时返回null  
     */  
    public Object dequeue(){   
        if(rear==front){   
            return null;   
        }   
        Object obj = a[front];   
        front = (front+1)%a.length;   
        return obj;   
    }   
    public static void main(String[] args) {   
        QueueArray q = new QueueArray(4);   
        System.out.println(q.enqueue("张三"));   
        System.out.println(q.enqueue("李斯"));   
        System.out.println(q.enqueue("赵五"));   
        System.out.println(q.enqueue("王一"));//无法入队列,队列满   
        for(int i=0;i<4;i++){   
            System.out.println(q.dequeue());   
        }   
    }   
}  


运行结果:
true
true
true
false
张三
李斯
赵五
null
下载源码:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics