【Java】数据结构-循环队列 2021-06-25 | 算法与数据结构 | 0 | 13 | 378 我的个人博客 孤桜懶契:http://gylq.github.io 队列 Queue 队列是一种先进先出的数据结果 循环队列实现输出截图 循环队列实现代码(完整)Queue.java(队列接口) 12345678 复制public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront();} LoopQueue.java 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 复制public class LoopQueue<E> implements Queue<E>{ private E[] data; private int front, tail; private int size; public LoopQueue(int capacity){ data =(E[]) new Object[capacity + 1]; front = 0; tail = 0 ; size = 0 ; } public LoopQueue(){ this(10); } public int getCapacity(){ return data.length - 1; } @Override public boolean isEmpty(){ return front == tail; } @Override public int getSize(){ return size; } @Override public void enqueue(E e){ if((tail + 1) % data.length == front) resize(getCapacity() * 2); data[tail] = e ; tail = (tail + 1) % data.length; size ++; } @Override public E dequeue(){ if(isEmpty()){ throw new IllegalArgumentException("Cannot dequeue from an empty queue."); } E ret = data[front]; data[front] = null; front = (front + 1) % data.length; size --; if(size == getCapacity() / 4 && getCapacity() / 2 != 0) resize(getCapacity() / 2); return ret; } @Override public E getFront(){ if(isEmpty()) throw new IllegalArgumentException("Queue is empty."); return data[front]; } private void resize(int newCapacity){ E[] newData =(E[]) new Object[newCapacity + 1]; for(int i = 0 ; i < size ; i ++) newData[i] = data[(i + front) % data.length]; data = newData; front = 0; tail = size; } @Override public String toString(){ StringBuilder res = new StringBuilder(); res.append(String.format("LoopQueue: size = %d, capacity = %d \n", size, getCapacity())); res.append("front ["); for(int i = front ; i != tail; i = (i + 1) % data.length) { res.append(data[i]); if ((i + 1) % data.length != tail) res.append(", "); } res.append("] tail"); return res.toString(); } public static void main(String[] args) { LoopQueue<Integer> queue = new LoopQueue<>(); for (int i = 0; i < 10; i++) { queue.enqueue(i); System.out.println(queue); if (i % 3 == 2) { queue.dequeue(); System.out.println(queue); } } }} 本文标题:【Java】数据结构-循环队列 文章作者:孤桜懶契 发布时间:2021年06月25日 - 19:22:36 最后更新:2022年05月20日 - 11:47:45 原始链接:https://gylq.gitee.io/posts/39.html 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。 -------------------本文结束 感谢您的阅读------------------- 坚持原创技术分享,感谢您的支持和鼓励! 打赏 微信支付 支付宝
v1.4.16