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)

  • 相关阅读:
    开发3dMax插件的方法和应用
    实现X*N
    fork与vfork的区别
    使用递归算法写一段程序
    宏和函数的区别
    多线程学习(一)
    [算法天天练]堆排序
    [转][算法天天练]堆与堆排序
    [转]快速排序 挖坑讲解方法
    [算法天天练]选择排序法
  • 原文地址:https://www.cnblogs.com/yidansheng/p/8255991.html
Copyright © 2011-2022 走看看