java实现队列

 

复制代码
/**
 * 队列,先进先出
 * 头指针永远指向第一个元素
 * 尾指针永远指向最后一个元素的后一个位置
 * 所有10个容量的数组构成的队列最多容纳9个元素
 *
 * @param <T>
 */
public class MQueue<T> {
    private final int length = 10;
    private final Object[] entry = new Object[length];
    private int head = 0;
    private int tail = 0;

    /**
     * 初始状态头指针和尾指针执行同一个位置
     *
     * @return
     */
    public boolean isEmpty() {
        return head == tail;
    }

    /**
     * 队列满,分为两种情况:
     * 1.head在前,tail在后,此时head=0,tail=length-1为满
     * 2.tail在前,head在后,此时head=tail+1为满
     *
     * @return
     */
    public boolean isFull() {
        return head == tail + 1 || (tail == length - 1 && head == 0);
    }

    /**
     * 入队列,添加到队尾
     * 如果数组后半部分已满,而数组前半部分有位置,则添加到数组之前半部分
     *
     * @param x
     */
    public void enQueue(T x) {
        if (isFull()) {
            throw new IndexOutOfBoundsException("队列已满");
        }

        entry[tail] = x;
        if (tail == length - 1) {
            tail = 0;
        } else {
            tail = tail + 1;
        }
    }

    /**
     * 出队列,从队首出
     *
     * @return
     */
    public T deQueue() {
        if (isEmpty()) {
            throw new IndexOutOfBoundsException("队列为空");
        }
        T x = (T) entry[head];
        if (head == length - 1) {
            head = 0;
        } else {
            head = head + 1;
        }
        return x;
    }

    public static void main(String[] args) {
        MQueue<Integer> q = new MQueue<>();
        for (int i = 0; i < 9; i++) {
            q.enQueue(i);
        }
        System.out.println(q.head);
        System.out.println(q.tail);
        System.out.println(q.deQueue());
    }
}
复制代码

 

posted @   Mars.wang  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示