Implement the following operations of a stack using queues.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • empty() -- Return whether the stack is empty.
解题思路:
用队列实现栈的操作。包含输入、输出、取栈顶元素、推断栈是否为空。
我们知道,栈是先进后出的容器,队列是先进先出的容器。所以输入元素非常easy,可是输出元素不是输出队列的front,而是back元素。删掉back元素。此时我们能够将队列1中的非队尾元素存在另外一个队列2中,删掉之前队列的最后一个元素不另行存储即可。

此时队列2中有元素。是可运行的容器。队列1是空,备用容器,所以我们须要两个表示符,代表两个队列,表示此队列是否是当前可操作的容器。简单来讲,就是用两个队列的操作(push()。pop(),empty())来实现栈的各种操作。


完整可运行代码例如以下:

#include<iostream>
#include<queue>
using namespace std;
queue<int> qu1;
queue<int> qu2;
bool qu1_use=1;
bool qu2_use=0;
void push(int x);
void pop() ;
int top() ;
bool empty() ;
void main()
{
push(1);
push(2);
push(3);
push(4);
int i=5;
while(i)
{
if(!empty())
{
cout<<top()<<endl;
pop();
}
i--;
} }
void push(int x)
{
if(qu1_use==1)
{
qu1.push(x);
}
else
qu2.push(x);
}
void pop()
{
if(qu1.empty()&&qu2.empty())
exit(0);
if(qu1_use==1&&!qu1.empty())
{
while(qu1.size()>1)
{
qu2.push(qu1.front());
qu1.pop();
}
qu1.pop();
qu1_use=0;
qu2_use=1;
return;
}
if(qu2_use==1&&!qu2.empty())
{
while(qu2.size()>1)
{
qu1.push(qu2.front());
qu2.pop();
}
qu2.pop();
qu1_use=1;
qu2_use=0;
return;
}
return;
} int top()
{ if(qu1_use==1&&!qu1.empty())
{
return qu1.back();
}
if(qu2_use==1&&!qu2.empty())
{
return qu2.back();
}
//if(qu1.empty()&&qu2.empty())
exit(0);
} bool empty()
{
if((qu1_use==1&&qu1.empty())||(qu2_use==1&&qu2.empty()))
{
cout<<"empty!"<<endl;
return true;
} else return false;
}

运行上面代码得到结果为:

4
3
2
1
empty!

最新文章

  1. InnoDB事务隔离级别
  2. 【BZOJ 2648】SJY摆棋子 &amp; 【BZOJ 2716】【Violet 3】天使玩偶
  3. 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
  4. [转贴] 从零开始学C++之异常(二):程序错误、异常(语法、抛出、捕获、传播)、栈展开
  5. HTML Imports
  6. 异步IO简介
  7. H5本地存储
  8. React翻译官网文档之JSX
  9. Python中高阶函数讲解
  10. 【tool】部署前端工具
  11. 使用ElasticSearch全文检索以及集群部署
  12. msm8909平台JEITA配置和bat-V therm表合入
  13. JAVA读取XML文件并解析获取元素、属性值、子元素信息
  14. mybatis mapper接口开发dao层
  15. TopK排序
  16. 「caffe编译bug」.build_release/lib/libcaffe.so: undefined reference to cv::imread
  17. 算法笔记_028:字符串转换成整数(Java)
  18. HDU 2031 进制转换(10进制转R进制)
  19. Django 2.0 学习(11):Django setuptools
  20. 我的转行之路(电气转IT)------2018阿里校招面经

热门文章

  1. centos7下部署Redis
  2. Ajax兼容性问题
  3. sqlite学习笔记11:C语言中使用sqlite之删除记录
  4. linux下通过命令启动多个终端运行对应的命令和程序
  5. centos下mysql多实例安装3306、3307实例(2014-10-15)
  6. ubuntu16.04环境下安装配置openface人脸识别程序
  7. ES shard unassigned的解决方法汇总
  8. 18.boost 图的拓扑排序
  9. Volatile variables
  10. 优动漫PAINT-朱槿花的画法