赞
踩
1. Python:一般的数组即可。只是采用stack的调用方式。
stack = [1,2,3]
stack.append(15) #向stack中添加元素
stack.pop() #取出并删除stack最近添加的元素
#注意:没有peek方法
stack[-1] #取出stack最近添加的元素,类似于peek方法
stack #非空,就是非0
2. Java:
Stack<Character> stack = new Stack<>(); //给定stack存放的类型(Deque)
stack.push(c); //添加元素c,也可以stack.add(c);
stack.pop(); //取出并删除stack最近添加的元素
stack.peek(); //取出stack最近添加的元素
stack.isEmpty(); //判断stack是否为空
https://www.bigocheatsheet.com/
1、有效的括号:https://blog.csdn.net/qq_34176797/article/details/118751956
2、 用栈实现队列 — leetcode 232
请仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回 true
;否则,返回 false
说明:
push to top
, peek/pop from top
, size
, 和 is empty
操作是合法的。进阶:
O(1)
的队列?换句话说,执行 n
个操作的总时间复杂度为 O(n)
,即使其中一个操作可能花费较长时间。示例:
输入: ["MyQueue", "push", "push", "peek", "pop", "empty"] [[], [1], [2], [], [], []] 输出: [null, null, null, 1, 1, false] 解释: MyQueue myQueue = new MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) myQueue.peek(); // return 1 myQueue.pop(); // return 1, queue is [2] myQueue.empty(); // return false
提示:
1 <= x <= 9
100
次 push
、pop
、peek
和 empty
pop
或者 peek
操作)队列:一种 先进先出(first in - first out, FIFO)的数据结构,队列中的元素都从后端(rear)入队(push),从前端(front)出队(pop)。实现队列最直观的方法是用链表。
栈:一种 后进先出(last in - first out, LIFO)的数据结构,栈中元素从栈顶(top)压入(push),也从栈顶弹出(pop)。
为了满足队列的 FIFO 的特性,需要用到两个栈,用其中一个来反转元素的入队顺序,用另一个来存储元素的最终顺序。两种方法的区别实际上就在于何时进行栈之间的元素交换。
方法一:使用两个栈 入队 - O(n), 出队 - O(1)
- 入队(push)
一个队列是 FIFO 的,但一个栈是 LIFO 的,最新压入的元素必须得放在栈底。为了实现这个目的,我们首先需要把
s1
中所有的元素移到s2
中,接着把新元素压入s2
。最后把s2
中所有的元素弹出,再把弹出的元素压入s1
。
private int front; public void push(int x) { if (s1.empty()) front = x; while (!s1.isEmpty()) s2.push(s1.pop()); s2.push(x); while (!s2.isEmpty()) s1.push(s2.pop()); }时间复杂度:O(n),对于除了新元素之外的所有元素,它们都会被压入两次,弹出两次。新元素只被压入一次,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。