【剑指offer】30.用两个栈实现队列
总目录:
1.问题描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: n≤1000
要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)
2.问题分析
1一个栈用于存储,另一个栈用于缓存,只是不确定为什么弹栈的时间复杂度也是O(1)
3.代码实例
存储与缓存
1 class Solution { 2 public: 3 void push(int node) { 4 stack1.push(node); 5 } 6 7 int pop() { 8 int ret = 0; 9 int curVal = 0; 10 while (!stack1.empty()) { 11 curVal = stack1.top(); 12 stack1.pop(); 13 stack2.push(curVal); 14 } 15 16 //记录stack1中的最后一个元素 17 ret = curVal; 18 stack2.pop();//弹出要的值,也就是队首 19 20 //压回stack1,保持顺序 21 while (!stack2.empty()) { 22 curVal = stack2.top(); 23 stack2.pop(); 24 stack1.push(curVal); 25 } 26 27 return ret; 28 } 29 30 private: 31 stack<int> stack1; 32 stack<int> stack2; 33 };