【剑指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 };
View Code

 

posted @ 2022-11-14 17:40  啊原来是这样呀  阅读(15)  评论(0编辑  收藏  举报