php2个栈写一个队列,【数据结构】栈面试题--两个栈实现一个队列
首先我们必须清楚,栈先进后出,队列先进先出。这道他们各自的特点以后,我们用两个栈来实现1个队列。
下边给出图片:
下边给出代码:
template
class Queue
{
public:
void Push(const T& x)
{
if (!_s2.empty())
{
while (!_s2.empty())
{
_s1.push(_s2.top());
_s2.pop();
}
}
_s1.push(x);
}
void Pop()
{
if (_s1.empty() && _s2.empty())//s1,s2均为空
{
return;
}
if (!_s2.empty())//s2不为空
{
_s2.pop();
}
if (!_s1.empty() && _s2.empty())//s1不为空
{
//while(!_s1.empty())
while (_s1.size() != 1)
{
_s2.push(_s1.top());//可以少push1次
_s1.pop();
}
_s1.pop();
}
}
void Display()
{
while (!_s2.empty())
{
cout << _s2.top() << " ";
_s2.pop();
}
while (!_s1.empty())
{
_s2.push(_s1.top());
_s1.pop();
}
while (!_s2.empty())
{
cout << _s2.top() << " ";
_s2.pop();
}
}
int Size()
{
return _s1.size() + _s2.size();
}
public:
stack _s1;
stack _s2;
};
void test()
{
Queue q;
cout << q.Size() << endl;
q.Push(2);
q.Push(3);
q.Push(1);
q.Pop();
q.Push(4);
q.Push(5);
q.Pop();
cout << q.Size() << endl;
q.Display();
}
int main()
{
test();
system("pause");
return 0;
}
以上代码的实现方法是图片右下角的解决方案所述(即就是:push时,如果栈2不为空,将栈2的元素push进栈1,
然后,直接将新的元素push进栈1;如果栈2为空,直接push进栈1 pop时,当栈2不为空,直接从栈2pop;当栈
2为空,将栈1的元素push进栈2(可以少push1次),弹出栈顶元素)
下边再给出另外1种实现办法(即就是1次pop以后,栈2的元素都push进栈1,具体思路图片中并没有提出):
看下边的代码(仅仅给出pop和push函数,其他的函数都同上)
void Push(const T& x)
{
_s1.push(x);
}
void Pop()
{
if (_s1.empty() && _s2.empty())//s1,s2均为空
{
return;
}
if (!_s2.empty())//s2不为空
{
_s2.pop();
}
else if (!_s1.empty() && _s2.empty())//s1不为空
{
//while(!_s1.empty())
while (_s1.size() != 1)
{
_s2.push(_s1.top());//可以少push1次
_s1.pop();
}
_s1.pop();
}
while (!_s2.empty())
{
_s1.push(_s2.top());
_s2.pop();
}
}
上边代码就实现了每次pop完以后,都将栈2中的剩余元素push进栈1,这类方法可能较第1种方法麻烦1点,但是都
可以实现。
如果以上叙述有问题,可以提出~~~
php2个栈写一个队列,【数据结构】栈面试题--两个栈实现一个队列相关推荐
- 实现一个队列类,该类用两个栈来实现
1 /* 2 * 实现一个队列类,该类用两个栈来实现 3 * 队列和栈的主要区别是,队列是先进先出,就像我们在食堂[派对打饭一样,先到先打 4 * 栈是先进后出,就像枪里面的子弹,最先进去的把压到了最 ...
- 常考数据结构与算法:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析 队列的特性是:"先入先出",栈的特性是:"先入后出" ...
- 在栈中压入一个字符串c语言,面试题 31:栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- (PTA)数据结构(作业)7、栈和队列应用,字符串矩阵,树
目录 选择题 编程题 1.7-1 表达式转换 (10 分) 2.7-2 堆栈操作合法性 (10 分) 3.7-3 串的模式匹配 (10 分) 选择题 1.令P代表入栈,O代表出栈.则将一个字符串3*a ...
- 由两个栈组成一个队列
使用C++完成<程序员代码面试指南 IT名企算法与数据结构题目> 题目 编写一个类,用两个栈实现队列,支持队列操作: - push:入队 - pop:出队(不返回值) - front:返回 ...
- 化栈为队(两个栈来实现一个队列)
实现一个MyQueue类,该类用两个栈来实现一个队列. 示例: MyQueue queue = new MyQueue();queue.push(1); queue.push(2); queue.pe ...
- 数据结构课程设计----停车场管理系统(栈和队列)
题目: 设停车场(如下图1所示)内只有一个可停放几量汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北 ...
最新文章
- 邀请参加活动的邀请函_圣诞节活动策划邀请函在线制作
- 设计模式学习笔记——访问者模式(VIsitor)
- TypeScript的安装步骤、运行问题及代码的简单运行
- JS 事件冒泡整理 浏览器的事件流
- 类似pyinstaller_pyinstaller安装与使用——那些我踩过的坑
- Windows Apache Django 配置
- 英特尔:我们解决VR体验所需的强大计算量
- 面向对象(Python):学习笔记之模块和包
- python 字符串处理_python 数据清洗之字符串处理
- DHCP报文详解及抓包实例
- arm板发热和功耗探讨
- 158 鄭光弼 守夫
- 独立对honor荣耀来说有哪些好处?
- linux文件名带星号,Linux安装之bash星号用法
- 大家都在学JAVA,那么学JAVA到底可以做什么?
- RK3588 Android12 SDK 中在device介绍及如何新建自己的产品lunch项
- 《第6讲 非线性优化 》读书笔记
- 小杜机器人线下店_小度机器人怎么领养?小度机器人功能最新一览
- Stardock Curtains v1.19.1 Windows主题美化软件中文直装版
- 子墨庖丁Android的ActionBar源码分析 (一)实例化
热门文章
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 微信公众号的文章中添加历史文章链接
- matlab与vrep联合仿真,基于MATLAB与V-REP的机器人加工轨迹生成与运动仿真.PDF
- 是父母讲给小孩子听的,但是成人世界更需要这些启示。
- 定时更换超级连接的代码
- 网信办:今年3月全国受理网络违法和不良信息举报1258.6万件
- 说出来你可能不信,谷歌一年要给苹果交200亿保护费。
- 国家广电总局:常规电视剧剧集正片时长不少于41分钟
- 2021全球智能手机出货13.2亿部,第一依旧是他,小米苹果紧随其后
- 游戏业界“大地震”!687亿美元,微软天价收购动视暴雪