题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
设两个栈为stack1,stack2;
1:首先想到最简单的方法:是入栈时将数据压入stack1,出栈时将stack1中的元素出栈压入stack2,在将stack2栈顶元素弹出,再将stack2中的剩余元素重新压入stack1,
这种方法很低效可想而知。
2:改进一下:入栈时检查stack1,如果stack1为空则元素全在stack2中,所以将stack2中的元素压入stack1中(记得检查stack2是否为空),再将元素入栈,如果stack1不为空直接将元素压入栈,同样出栈时检查stack2,如果为空将stack1中的元素压入stack2再将栈顶元素出栈,如果不为空直接将栈顶元素出栈。
 
方法2的c++代码实现:
 
 
class Solution
{
public:
void push(int node) {
if (stack1.size() != ) stack1.push(node);
else{
int n = (int)stack2.size();
for (int i = ; i < n; i++){
stack1.push(stack2.top());
stack2.pop();
}
stack1.push(node);
}
} int pop() {
if (stack2.size() != ) {
int temp = stack2.top();
stack2.pop();
return temp;
}
else {
int n = (int)stack1.size();
for (int i = ; i < n - ; i++){
stack2.push(stack1.top());
stack1.pop();
}
int temp =stack1.top();
stack1.pop();
return temp;
} } private:
stack<int> stack1;
stack<int> stack2;
};

在网上找到一种更高效的方法:入栈时直接将元素压入stack1,出栈时检查stack2,如果为空将stack1中的元素压入stack2,如果不为空直接将stack2栈顶元素出栈,很巧妙

class Solution
{
public:
void push(int node) {
stack1.push(node);
} int pop() {
int temp;
if (!stack2.empty()) {
temp = stack2.top();
stack2.pop();
return temp;
}
else {
int n = stack1.size();
for (int i = ; i < n; i++){
stack2.push(stack1.top());
stack1.pop();
}
temp = stack2.top();
stack2.pop();
return temp;
}
}

最新文章

  1. 关于NODE NPM 输入命令后没反应的问题
  2. 使用pngquant命令近乎无损压缩PNG图片大小减少70%左右
  3. python反射原理
  4. Web Essentials之HTML和CSS操作技巧
  5. Shell_Shell调用SQLPlus简介(案例)
  6. iOS 8.3 JB ready
  7. &lt;?php $sql = &lt;&lt;&lt;EOF 。。。。EOF;?&gt;这种写法是什么意思
  8. 域名下Web项目重定向出现DNS域名解析错误问题
  9. Java 多线程 简单实例 (Thread)
  10. MySQL 错误日志(Error Log)
  11. iOS多线程基本使用
  12. 如何搭建一个B2B电商的跨境系统网站?
  13. 谓词筛选表达式的扩展库PredicateLib
  14. linux部署Web项目总结
  15. [ Build Tools ] Repositories
  16. [Oracle][OnlineREDO]数据库无法启动时的对应策略:
  17. shiro 认证思路
  18. 20145301 赵嘉鑫 《网络对抗》Exp6 信息搜集与漏洞扫描
  19. django中的ajax组件
  20. 最新的IDEA激活方式

热门文章

  1. morphia(5)-删除
  2. 关于css中父元素与子元素之间margin-top的问题
  3. HDU 5230 ZCC loves hacking 大数字的整数划分
  4. MySQL简单的确定瓶颈
  5. awk一些简单命令
  6. Docker容器与容器数据
  7. aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误
  8. CF1081C Colorful Bricks
  9. 从零开始利用vue-cli搭建简单音乐网站(八)
  10. XML文件的解析和序列化