stack_2.由两个栈组成队列
2024-10-11 08:17:14
思路:
用两个栈($stack_a, $stack_b),当push的时候,压入$stack_a, 让pop的时候,先把$stack_a元素依次全部倒入$stack_b中,再对$stack_b进行pop,然后再还原$stack_a,$stack_b(把$stack_b倒入stack_a)
<?php
class StackQueue
{
public $stack_a;
public $stack_b;
public function __construct()
{
$this->stack_a = new SplStack();
$this->stack_b = new SplStack();
}
public function pop()
{
$this->exchange($this->stack_a, $this->stack_b);
$pop = $this->stack_b->pop();
$this->exchange($this->stack_b, $this->stack_a);
return $pop;
}
public function push($value)
{
$push = $this->stack_a->push($value);
return $push;
}
public function exchange($stack_a, $stack_b)
{
$count = $stack_a->count();
for ($i = 0; $i < $count; $i++) {
$pop = $stack_a->pop();
$stack_b->push($pop);
}
}
}
$StackQueue = new StackQueue();
$StackQueue->push(1);
$StackQueue->push(2);
echo $StackQueue->pop();
echo $StackQueue->pop();
最新文章
- delphi实现的RTMP播放
- 作业2-浅谈数组求和java实验
- android 中解析XML的方法(转)
- PHP防止SQL注入与几种正则表达式讲解
- onTextChanged参数解释及实现EditText字数监听
- HBase的rowkey的设计原则
- [置顶] 北漂的大三IT男(暂完)
- 使用ArcGIS API for Silverlight 进行复合多条件空间查询
- 自动删除超过30天文件的vbs脚本【转发】
- ASP.NET-SHA256加密方法
- 面向对象A 知识点总结
- C# Excel行高、列宽、合并单元格、单元格边框线、冻结
- Appium Demo
- Zookeeper —— 一致性协议
- web.py框架之基本应用
- 前端的重要部分js
- HDOJ2041_超级楼梯(斐波拉契数列)
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
- Linux 安装Python虚拟环境,virtualenvwrapper
- js中获取url后面的参数值
热门文章
- javascript 关于弹出新页面始终在正中央方法
- 【转载】通过sqlserver日志恢复误删除的数据
- 【WPF学习笔记】之如何设置下拉框读取SqlServer数据库的值:动画系列之(一)
- JavaScript -- JavaScript高级程序设计
- 在pycharm中误删了Python文件,怎么办,挺急的?
- restlet验证
- SecureCRT 会话设置项
- 如何利用Windows System Image Manager制作一个answer file
- 用c++后缀自动机实现最大公共字符串算法,并封装成Python库
- drawable canvas使用