java 环形队列简单实现

这将是我在csdn,发表的第一篇文章,简单的实现了一个环形队列的代码;

/**
 * 环形队列
 * @author Administrator
 *
 */
public class MySelfQueue {


    int capacity = 10;
    int[] container;
    int headIndex = 0;//队列头部位置
    int nextTailIndex = 0;//队列尾部下一个位置
    int tailIndex = 0;//队列尾部位置
    int size = 0;


    MySelfQueue(){
        container = new int[capacity];
    }


    MySelfQueue(int capacity){
        this.capacity = capacity;
        container = new int[capacity];
    }


    public synchronized int getSize(){
        return size;
    }


    public synchronized boolean pushData(int data){
        if(getSize() < capacity){
            container[nextTailIndex] = data;
            tailIndex = nextTailIndex;
            size++;
            if(nextTailIndex + 1 == capacity){
                nextTailIndex = 0;
            }else{
                nextTailIndex++;
            }
            return true;
        }
        throw new RuntimeException("队列已满");
    }


    public synchronized int pullData(){
        if(getSize() > 0){
            int rdata = container[headIndex];
            container[headIndex] = 0;
            size--;


            if(getSize() == 0){
                headIndex = 0;
                nextTailIndex = 0;
                tailIndex = 0;
            }else{
                if(headIndex + 1 == capacity){
                    headIndex = 0;
                }else{
                    headIndex++;
                }
            }
            return rdata;
        }
        throw new RuntimeException("队列为空");
    }


    public void clearQueue(){
        if(getSize() > 0){
            container = new int[capacity];
            headIndex = 0;
            tailIndex = 0;
            size = 0;
            nextTailIndex = 0;
        }
    }


    public String getContent() {
        String str = "[";
        for(int i = 0 ; i < container.length ; i++){
            if(i < container.length - 1){
                str += container[i] + ",";
            }else{
                str += container[i];
            }
        }
        str += "]";
        return str;
    }


    public static void main(String[] args) {
        MySelfQueue queue = new MySelfQueue(5);
        queue.pushData(1);
        queue.pushData(2);
        queue.pushData(3);
        queue.pushData(4);
        queue.pushData(5);
        System.out.println(queue.getContent());//[1,2,3,4,5]
        System.out.println("head:" + queue.headIndex + "   tail:" + queue.tailIndex);// head:0   tail:4
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 1  head:1   tail:4
        System.out.println(queue.getContent());//[0,2,3,4,5]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 2  head:2   tail:4
        System.out.println(queue.getContent());//[0,0,3,4,5]
        queue.pushData(6);
        System.out.println("head:" + queue.headIndex + "   tail:" + queue.tailIndex);// head:2   tail:0
        System.out.println(queue.getContent());//[6,0,3,4,5]
        queue.pushData(7);
        System.out.println("head:" + queue.headIndex + "   tail:" + queue.tailIndex);// head:2   tail:1
        System.out.println(queue.getContent());//[6,7,3,4,5]




        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 3  head:3   tail:1
        System.out.println(queue.getContent());//[6,7,0,4,5]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 4  head:4   tail:1
        System.out.println(queue.getContent());//[6,7,0,0,5]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 5  head:0   tail:1
        System.out.println(queue.getContent());//[6,7,0,0,0]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 6  head:1   tail:1
        System.out.println(queue.getContent());//[0,7,0,0,0]
        queue.pushData(8);
        System.out.println(queue.getSize());
        System.out.println(queue.getContent());//[0,7,8,0,0]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 7  head:2   tail:2
        System.out.println(queue.getContent());//[0,0,8,0,0]
        System.out.println("出队列的值" + queue.pullData() + "  head:" + queue.headIndex + "   tail:" + queue.tailIndex);//出队列的值 8  head:0   tail:0
        System.out.println(queue.getContent());//[0,0,0,0,0]


        System.out.println(queue.getSize());


    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值