zoukankan      html  css  js  c++  java
  • 刷题upupup【Java中Queue、Stack、Heap用法总结】

    【Queue】

    先进先出(First-In-First-Out),LinkedList实现了Queue接口。它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

    add()       增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
    remove()   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
    element()  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
    offer()       添加一个元素并返回true       如果队列已满,则返回false
    poll()         移除并返问队列头部的元素    如果队列为空,则返回null
    peek()       返回队列头部的元素             如果队列为空,则返回null
    put()        添加一个元素                      如果队列满,则阻塞
    take()        移除并返回队列头部的元素     如果队列为空,则阻塞

    boolean isEmpty() 判断队列是否为空

    size() 返回队列长度

    时间复杂度分析:

    O(1) Push / O(1) Pop / O(1) Top

    PriorityQueue

    默认为最小堆,可以用比较器构造最大堆

    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(k, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });

    【Stack】

    boolean empty() 测试堆栈是否为空。

    Object peek() 查看堆栈顶部的对象,但不从堆栈中移除它。

    Object push() 移除堆栈顶部的对象,并作为此函数的值返回该对象。

    Object pop() 把项压入堆栈顶部。

    时间复杂度:

    O(1) Push / O(1) Pop / O(1) Top

    【Heap】

    Heap 是一种二叉树(binary tree), 说得再准确一点, 它是一种完全二叉树(complete binary tree)。

    对于一个完全二叉树, 没有必要用常规的树结构(使用指针)来表示, 因为如果从上到下走过每层(每层内从左到右)给所有节点编号。(根节点的编号为0)的话, 完全二叉树有以下特征:father(i) = i/2 其中father(i)表示编号为i的节点的父节点的下标;leftchild(i) = i*2+1, rightchild(i) = i*2+2。所以使用数组就可以进行存储。

    最小堆:父结点的值小于两个左右结点的值;最大堆:父结点的值大于两个左右结点的值。

    复杂度总结:

    add - O(logN)

    poll - O(logN)

    top - O(1)

  • 相关阅读:
    mailto发送邮件
    使用css实现一个持续的动画效果
    documentFragment添加节点
    删除数组的第一个元素,不要直接修改数组,结果返回新的数组
    js数组去重
    css定位position(侧边栏导航)
    mongoexport导出mongodb数据库中的数据
    textarea头部不顶行问题和textarea禁止拉伸
    HTML meta标签
    textarea
  • 原文地址:https://www.cnblogs.com/yidansheng/p/8255991.html
Copyright © 2011-2022 走看看