Queue 队列

队列

队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

img

队列主要操作

  • 入队
  • 出队
  • 是否为空队列
  • 清空队列
  • 查看头队列
  • 返回队列长度
顺序队列
    private int front;
    private int rear;
    private int maxsize;
    private Object[] obj = null;

    /**
     * 初始化大小
     * @param maxsize
     */
    Dueue(int maxsize) {
        if (maxsize <= 0) {
            throw new RuntimeException("数组大小不能小于0");
        }
        this.maxsize = maxsize;
        obj = new Object[maxsize];
    }

    /**
     * 添加队列
     * @param o
     * @return
     */
    public boolean add(E o) {
        if (isFull()) {
            throw new RuntimeException("full");
        }

        obj[rear++] = o;

        return true;
    }

    /**
     * 队列是否为满
     * @return
     */
    public boolean isFull() {
        return rear == maxsize;
    }

    /**
     * 队列是否为空
     * @return
     */
    public boolean isEmpty() {
        return rear == front;
    }

    /**
     * 查看头元素
     * @return
     */
    public E peek() {
        if (isEmpty()) {
            throw new RuntimeException("null dueue");
        }
        return (E) obj[front];
    }

    /**
     * 出队,删除元素
     * @return
     */
    public E poll() {
        if (isEmpty()) {
            throw new RuntimeException("null dueue");
        }
        E value = (E) obj[front];
        obj[front++] = null;
        return value;
    }

    /**
     * 队列大小
     * @return
     */
    public int size() {
        return rear - front;
    }

循环队列

    private int front;
    private int rear;
    private int maxsize;
    private int size;
    private Object[] data = null;

    public Dueue(int size){
        if(size>=0){
            throw  new RuntimeException("初始化大小不能小于0");
        }
        maxsize=size;
        data=new Object[size];
    }

    public void add(E e){
        if(isFull())
            throw  new RuntimeException("full");
        data[rear] = e;
        rear = (rear + 1)%maxsize;
        size++;
    }
    public boolean isFull(){
        return size==maxsize;
    }

    public int size(){
        return size;
    }

    public boolean empty(){
        return size==0;
    }
    public E peek(){
        if(empty())
            throw  new RuntimeException("null");
        return (E) data[front];
    }

    public E poll(){
        if(empty())
            throw  new RuntimeException("null");
        E value = (E) data[front];
        data[front] = null;
        front = (front+1)%maxsize;
        size--;
        return value;
    }

    public void clear(){
        Arrays.fill(data, null);
        size = 0;
        front = 0;
        rear = 0;
    }
posted @ 2019-09-18 01:27  webzom  阅读(203)  评论(0)    收藏  举报