我的个人博客
队列 Queue
循环队列实现输出截图
![image-20210625210003170]()
循环队列实现代码(完整)
Queue.java(队列接口)
1 2 3 4 5 6 7 8
|
public interface Queue<E> {
int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront(); }
|
LoopQueue.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
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); } } } }
|
FROM:gylq.gitee Author:孤桜懶契
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/729940.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论