day10
1、栈与队列
- 队列:
- 队列是一个有序列表,可以用数组(顺序存储)或是链表(链式存储)来实现
- 遵循先入先出的原则。即:先存入队列的数据先取出,后存入队列的数据后取出。
- 从队尾加数据,从队首取数据
- 栈
- 栈是一个先入后出的有序列表
- 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
- 最先放入栈中的元素在栈底,最后放入的元素在栈顶;而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
2、leetcode232 用栈实现队列
-
代码实现
class MyQueue { Stack<Integer> in; Stack<Integer> out; public MyQueue() { in = new Stack<Integer>(); out = new Stack<Integer>(); } public void push(int x) { in.push(x); } public int pop() { if(out.empty()){ while(!in.empty()){ out.push(in.pop()); } } return out.pop(); } public int peek() { int result = this.pop(); out.push(result); return result; } public boolean empty() { return in.empty()&&out.empty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */
3、leetcode225 用队列实现栈
-
代码实现
class MyStack { Deque<Integer> deque; public MyStack() { deque = new ArrayDeque<Integer>(); } public void push(int x) { deque.offerLast(x); } public int pop() { int size = deque.size(); int remove = size - 1; while(remove-- > 0){ deque.offerLast(deque.pollFirst()); } return deque.pollFirst(); } public int top() { return deque.peekLast(); } public boolean empty() { return deque.isEmpty(); } } /** * Your MyStack object will be instantiated and called as such: * MyStack obj = new MyStack(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.top(); * boolean param_4 = obj.empty(); */

浙公网安备 33010602011771号