网站推广专业,百度推广效果,学技巧网站制作,程显峰 wordpress手撕算法-队列实现栈And栈实现队列 两个栈实现队列两个队列实现栈包含min函数的栈 两个栈实现队列
分析#xff1a;转换数据方向#xff0c;第一个栈写#xff0c;第二个栈读。
代码#xff1a;
import java.util.*;
import java.util.Stack;public class Solution {Sta… 手撕算法-队列实现栈And栈实现队列 两个栈实现队列两个队列实现栈包含min函数的栈 两个栈实现队列
分析转换数据方向第一个栈写第二个栈读。
代码
import java.util.*;
import java.util.Stack;public class Solution {StackInteger stack1 new StackInteger();StackInteger stack2 new StackInteger();public void push(int node) {stack1.push(node);}public int pop() {if(stack2.isEmpty()) {while(!stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.pop();}
}两个队列实现栈
分析先进先出变先进后出。两个队列
push时push到q1pop时先将q1的元素转移到q2中最终q1只剩一个元素长度为1此时即为最后push进来的后进先出pop完成后需要交换q1和q2方便下次poppush操作始终在q1
代码
public class MyStack {// 进行push操作QueueInteger q1 new LinkedList();// 进行pop操作时存储之前的值QueueInteger q2 new LinkedList();public void push(int node) {q1.add(node);}public int pop() {while (q1.size() 1) {q2.add(q1.poll());}// 交换q1和q2QueueInteger tmp q1;q1 q2;q2 tmp;return q2.poll();}public int top(){while (q1.size() 1) {q2.add(q1.poll());}int res q1.peek();// 最后一个也放进去q2然后交换q1和q2q2.add(q1.poll());// 交换q1和q2QueueInteger tmp q1;q1 q2;q2 tmp;return res;}public boolean empty() {return q1.isEmpty() q2.isEmpty();}public static void main(String[] args) {MyStack myStack new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);System.out.println(myStack.top());System.out.println(myStack.pop());System.out.println(myStack.pop());System.out.println(myStack.pop());System.out.println(myStack.empty());}
}输出结果符合预期
包含min函数的栈
分析代码
import java.util.*;
import java.util.Stack;public class Solution {//用于栈的push 与 popStackInteger s1 new StackInteger();//用于存储最小minStackInteger s2 new StackInteger();public void push(int node) {s1.push(node);// 空或者新元素较小则入栈if (s2.isEmpty() || s2.peek() node) {s2.push(node);} else {// 最小的还是原来s2的栈顶再次入栈表示这么多数据的最小值s2.push(s2.peek());}}public void pop() {s1.pop();s2.pop();}public int top() {return s1.peek();}public int min() {return s2.peek();}
}