队列(顺序存储) java实现

http://blog.csdn.net/wuwenxiang91322/article/details/12259099

package com.struct.CirQueue;

/**
 * 循环队列
 * @author WWX
 */
public class CirQueue<E> {
    //对象数组,队列最多存储a.length-1个对象
    E[] a;
    //默认初始化大小
    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=(E[])(new Object[size]);
        front=0;
        rear=0;
    }

    /**
     * 将一个对象追加到队列尾部
     * @param obj
     * @return 队列满时返回false,否则返回true
     * @author WWX
     */
    public boolean enqueue(E obj){
        if((rear+1)%a.length==front){
            return false;
        }else{
            a[rear]=obj;
            rear=(rear+1)%a.length;
            return true;
        }
    }

    /**
     * 队列头部出队
     * @return
     * @author WWX
     */
    public E dequeue(){
        if(rear==front)
            return null;
        else{
            E obj =a[front];
            front=(front+1)%a.length;
            return obj;
        }
    }

    /**
     * 队列长度
     * @return
     * @author WWX
     */
    public  int size(){
        return (rear-front)&(a.length-1);
    }
    //队列长度(另一种方法)
    public int length(){
        if(rear>front){
            return rear-front;
        }else
            return a.length-1;
    }

    /**
     * 判断是否为空 
     * @return
     * @author WWX
     */
    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");
        System.out.println("size="+queue.size());
        int size=queue.size();
        System.out.println("*******出栈操作*******");
        for(int i=0; i<size;i++){
            System.out.print(queue.dequeue()+" ");
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值