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