队列:循环队列

基于非动态数组实现的循环队列
循环队列.PNG

时间复杂度
入队:O(1)
出队:O(1)

接口类:

public interface Queue<E> {
    void enqueue(E e);
    E dequeue();
    E getFront();
    int getSize();
    boolean isEmpty();
}

实现类:

public class CircularQueue<E> implements Queue<E> {

    private E[] data ;
    private int head;
    private int tail;
    private int size ;
    private int capacity;

    public CircularQueue(int capacity){
        this.data = (E[]) new Object[capacity];
        this.head =0;
        this.tail =0;
        this.size = 0;
        this.capacity = capacity;
    }

    @Override
    public void enqueue(E e) {
        //队满条件为(tail+1)%capacity == head
        if ((tail+1)%capacity == head){
            throw new IllegalArgumentException("队满无法添加元素");
        }
        data[tail] = e;
        tail = (tail+1)%capacity;
        size++;

    }

    @Override
    public E dequeue() {

        if (tail == head){
            throw new IllegalArgumentException("队列为空,无法删除元素");

        }

        E r = data[head];

        head = (head+1)%capacity;
        size--;
        return r;
    }

    @Override
    public E getFront() {
        return data[head];
    }

    @Override
    public int getSize() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append(String.format("Queue: size=%d , capacity = %d\n",size ,capacity));
        res.append("head[");
        for (int i = 0; i <size ; i++){
            res.append(data[(i+head)%data.length]);
            if( (i+head+1)%data.length != tail){
                res.append(",");
            }
        }
        res.append("]tail");
        return res.toString();
    }
}

测试:

public class Main {

    public static void main(String[] args) {
    Queue<Integer> queue = new CircularQueue<>(10);

    for (int i = 0 ; i < 9 ; i ++){
        queue.enqueue(i);
        System.out.println(queue);
    }

    for (int i = 0 ; i < 5 ; i++)
         queue.dequeue();
    System.out.println(queue);
    for (int i = 0 ; i < 5 ; i ++){
            queue.enqueue(i);
    }
        System.out.println(queue);


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

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 那什么才是垃圾作品呢?艺术家觉得没意义,普通人又觉得没意思。
    周古禾阅读 415评论 0 0
  • 今天中午晴天了,可是早晨儿子起床有点晚,没等吃饭就7点多了,有点急,匆匆的吃了点饭就送他上学了,到了学校也比...
    刘轩卓爸爸阅读 196评论 0 2
  • 感赏闺密帮我集赞,这回我家狗狗够吃的狗粮,给予的帮助,好有爱,被帮助的感觉真好,以后会吸引更多值得帮助我的人,感谢...
    丽清笑阅读 261评论 0 1
  • 《说话的魅力》刘墉 RIA拆书法 《一句话让你成功》P26-30 R 阅读片段 心动片段 I 用自己的话重述指示...
    简简小时间阅读 1,054评论 0 2
  • 感恩今天自己真的在无理由的喜悦,感恩前两天的清理,让我越来越通透了,谢谢谢谢谢谢 感恩每天零购让我轻松的进账,感恩...
    富足的开心的宝贝阅读 202评论 0 0