刷题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)

转载于:https://www.cnblogs.com/yidansheng/p/8255991.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值