环形队列结构

/* 环形队列(Queue)。队列简称队。是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。
其操作特性为先进先出(First In First Out,FIFO),并且只允许在队尾进,队头出。*/
public class RingQueue {

    public static void main(String[] args) {
        RingNode node = new RingNode(3);
        for (int i = 0; i < 9; i++) {
            System.out.println("队列有效个数:" + node.getAll());
            node.add(i);
            System.out.println("第" + (i + 1) + "次添加");
            if (i % 2 == 1) {
                System.out.println("拿出数据:" + node.get());
            }
            System.out.println("========================");
        }
    }
}

class RingNode {

    public int front = 0; //头指针指向最前面的元素
    public int real = 0;  //尾指针指向最后面的元素后一个位置
    public int maxsize;  //创建队列的大小
    public Object[] arr; //创建容器


    public RingNode(int maxsize) {

        this.arr = new Object[maxsize];
        this.maxsize = maxsize;
    }

    public void add(Object o) {

        if (isFull()) {
            //
            System.out.println("队列已满");
            return;
        }
        //添加数据
        arr[real] = o;
        System.out.printf("添加:arr[%d]=%d\n", real % maxsize, arr[real % maxsize]);//arr[0]=1
        real = (real + 1) % maxsize; //取余


    }

    public Object get() {
        if (!isEmpty()) {
            System.out.printf("拿出:arr[%d]=%d\n", front % maxsize, arr[front % maxsize]);//arr[0]=1
            Object a = arr[front% maxsize];
            arr[front% maxsize] = null;
            front = (front + 1) % maxsize;
            return a;
        }
        return null;
    }

    /*满*/
    public boolean isFull() {
        return ((real + 1) % maxsize) == front;
    }

    /*空*/
    public boolean isEmpty() {
        return real == front;
    }

    /*有效数据个数*/
    public int getAll() {

        for (int i = front; i < front + (((real + maxsize - front) % maxsize)); i++) {

            System.out.printf("剩余:arr[%d]=%d\n", i % maxsize, arr[i % maxsize]);//arr[0]=1
        }
        return (real + maxsize - front) % maxsize;
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20岁30年经验的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值