算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列
思路:同样使用 PHP 的数组模拟栈。栈的特点是先进后出,队列的特点是先进先出,可以用第一个栈(StackPush)作为压入栈,压入数据的时候只往这个栈中压入数据,第二个栈作(StackPop)为弹出栈,在弹出数据的时候只从这个栈中弹出。在弹出之前,把压入栈的数据全部 弹出至 弹出栈,再把弹出栈的数据弹出。
代码:
1 <?php 2 3 class TwoStacksQueue { 4 //压入栈 5 private $StackPush = array(); 6 //弹出栈 7 private $StackPop = array(); 8 9 //压入栈 压入数据 10 public function add($pushInt) { 11 array_push($this->StackPush, $pushInt); 12 } 13 14 //将数据从压入栈 倒入 弹出栈 15 public function poll() { 16 if (empty($this->StackPush) && empty($this->StackPop)) { 17 echo 'Queue is empty.'; 18 exit(); 19 } else if (empty($this->StackPop)) { 20 while (!empty($this->StackPush)) { 21 $pop = array_pop($this->StackPush); 22 array_push($this->StackPop, $pop); 23 } 24 } 25 } 26 27 //查看弹出栈的栈顶元素 28 public function peek() { 29 if (empty($this->StackPush) && empty($this->StackPop)) { 30 echo 'Queue is empty.'; 31 exit(); 32 } else if (empty($this->StackPop)) { 33 while (!empty($this->StackPush)) { 34 $pop = array_pop($this->StackPush); 35 array_push($this->StackPop, $pop); 36 } 37 } 38 $count = count($this->StackPop); 39 return $this->StackPop[$count - 1]; 40 } 41 42 //查看压入栈 43 public function getStackPush() { 44 return $this->StackPush; 45 } 46 47 //查看弹出栈 48 public function getStackPop() { 49 return $this->StackPop; 50 } 51 } 52 53 $queue = new TwoStacksQueue(); 54 $queue->add(1); 55 $queue->add(2); 56 $queue->add(3); 57 $queue->add(4); 58 $queue->add(5); 59 var_dump($queue->getStackPush()); 60 $queue->poll(); 61 var_dump($queue->getStackPush()); 62 var_dump($queue->getStackPop()); 63 var_dump($queue->peek());
输出:
array0 => int 11 => int 22 => int 33 => int 44 => int 5 arrayempty array0 => int 51 => int 42 => int 33 => int 24 => int 1 int 1
转载于:https://www.cnblogs.com/dee0912/p/4912124.html
算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列相关推荐
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 栈与队列2——两个栈组成队列
题目 编写一个类,用两个栈实现一个队列,并实现队列的基本操作(add,poll,peek) 思路 一个栈stackPush作为正常压入的栈,一个栈stackPop作为弹出的栈,将stackPush中的 ...
- 栈一:用两个栈实现队列
/** * 题目:用两个栈实现队列 * 描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. * 解决方案:方法一:一个作为存储用,一个作为弹出用 * * ...
- 两个队列实现一个栈思路c语言,两个栈实现队列功能C语言实现能运行!
#include #include typedef struct sq { char *ps; int top; int Maxsize; }stack; void initstack(stack * ...
- 用栈实现队列---用两个栈模拟实现一个队列
入队列:直接将元素放进s1(s1栈顶为模拟队列的队尾); 出队列:如果s2非空,直接让s2出栈(s2栈顶为模拟队列的队头): 如果s2为空,将s1中所有元素导入s2中,然后让s2出栈. 获取队头元素 ...
- 由两个栈组成一个队列
使用C++完成<程序员代码面试指南 IT名企算法与数据结构题目> 题目 编写一个类,用两个栈实现队列,支持队列操作: - push:入队 - pop:出队(不返回值) - front:返回 ...
- 微软等数据结构+算法面试100题全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
- 数据结构+算法面试100题~~~摘自CSDN,作者July
1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / / 6 14 ...
- 微软公司等数据结构+算法面试100题2010版全部出炉
微软等公司数据结构+算法面试100题2010版首次完整亮相 作者:July.2010年12月6日. 更新:现今,这100题的答案已经全部整理出来了,微软 ...
最新文章
- 做项目时用到的linux知识
- ASP.NET使用数据库存储、读取并修改图片
- python 遍历一个空列表
- 如何直接打开AutoCAD格式的DXF文件
- 高中计算机考试实施方案,山东省高中信息技术学业水平考试实施方案及思考
- 便携式明渠流量计的功能特点及资质证书
- Unity Driven 属性(代码控制属性)使用示例
- 正向代理与反向代理的区别
- SLAM闲谈(一)--词袋模型
- heuristic manner
- 前端微信一键登录和微信小程序支付总结
- linux ln命令详解
- 理财就是理生活读后感
- ajax与Java后台互相传数据
- backtrack5 初步配置
- 阿里云服务器的端口有什么用,常用的端口有哪些,如何配置
- 【Python基础语法记录】
- 北京一行(七)——返程
- vim vim-plug .vim插件安装及使用
- 点餐订餐系统应用android源码