栈
栈的定义
栈(stack)是限定仅在表尾进行插入和删除的线性表。
允许插入和删除的一端成为栈顶(top),另一端称为栈底(bottom),不含任何数据元的的栈为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
Java中栈的方法
源码部分如下
- 栈的插入(压栈)
- 栈的删除(出栈)
- 获取栈顶元素
- 栈空判断
L0232. 用栈实现队列
队列
队列的定义
队列是一种先进先出(First In First Out)的线性表,简称FIFO,允许插入的一端是队尾,允许删除的一段是队头。
Java中队列的常用方法
注意
add/remove
源自集合,所以添加到队尾,从队头删除;offer/poll
源自队列(先进先出 => 尾进头出),所以添加到队尾,从队头删除;push/pop
源自栈(先进后出 => 头进头出),所以添加到队头,从队头删除;offerFirst/offerLast/pollFirst/pollLast
源自双端队列(两端都可以进也都可以出),根据字面意思,offerFirst
添加到队头,offerLast
添加到队尾,pollFirst
从队头删除,pollLast
从队尾删除。
总结:add/offer/offerLast
添加队尾,三个方法等价;push/offerFirst
添加队头,两个方法等价。remove/pop/poll/pollFirst
删除队头,四个方法等价;pollLast
删除队尾。
虽说某几个方法等价,但是我们在使用的时候,建议根据用途来使用不同的方法,比如你想把LinkedList
当做集合list
,那么应该用add/remove
,如果想用作队列,则使用offer/poll
,如果用作栈,则使用push/pop
,如果用作双端队列,则使用offerFirst/offerLast/pollFirst/pollLast
。根据语义使用,就不会发生:我想删队尾,结果删了队头这种事了。