「算法总结系列」:栈

Stack

Posted by Wenqian on November 22, 2019

什么是栈

栈是一种后进先出(LIFO)的数据结构。它通常具备以下几种操作:(1)pop:提出栈顶元素。(2)push:将一个元素压进栈中。(3)peek:返回栈顶元素。(4)empty:判断栈是否为空。

什么时候会用到栈

一般来说有以下几种情况: (1)明确的考察你是否真的理解栈这种数据结构,比如让你用栈来实现一些特殊功能,或者用栈来实现其他数据结构。例如:Min StackImplement Queue using Stacks。 (2)和括号有关的题目,像是判断括号是否有效,或者计算带括号的算式。比如Valid ParenthesesBasic Calculator。 (3)树的遍历。通常需要你用循环的方式(而不是递归方式)按照某个顺序遍历树时要用到栈。例如Binary Tree Preorder TraversalBinary Tree Postorder Traversal。 (4)和某一段单调序列有关。例如Largest Rectangle in HistogramMaximal RectangleRemove Duplicate Letters

如何实现栈

栈一般由数组或链表实现。但Java中有Stack类,所以不用自己实现。

栈操作的时间复杂度

上面提到的操作的时间复杂度均为O(1)。