本文主要是介绍程序员面试金典:集合栈、用两个栈实现队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.集合栈
题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][](C++为vector<vector<int>>),为完成所有操作后的SetOfStacks,顺序应为从下到上,默认初始的SetOfStacks为空。保证数据合法。
public ArrayList<ArrayList<Integer>> setOfStacks(int[][] one, int size) {ArrayList<ArrayList<Integer>> stacklist = new ArrayList<>(); int length = one.length; ArrayList<Integer> cur = new ArrayList<>(); stacklist.add(cur); for (int i = 0; i < length; i++) { if(one[i][0]==1)//入栈 { if(cur.size()==size) { cur = new ArrayList<>(); stacklist.add(cur); } cur.add(one[i][1]); } else if(one[i][0]==2)//出栈 { if(cur.size()==0) { stacklist.remove(stacklist.size()-1); cur = stacklist.get(stacklist.size()-1); } cur.remove(cur.size()-1); } } return stacklist; }
2.用两个栈实现队列
题目描述
import java.util.Stack;public class Solution {Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();public void push(int node) {stack1.push(node);}public int pop() {if(stack1.isEmpty()&&stack2.isEmpty())throw new RuntimeException("queue is empty");while(!stack2.isEmpty()){return stack2.pop();}while(!stack1.isEmpty()){stack2.push(stack1.pop());}return stack2.pop();}
}
这篇关于程序员面试金典:集合栈、用两个栈实现队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!