算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列
思路:同样使用 PHP 的数组模拟栈。栈的特点是先进后出,队列的特点是先进先出,可以用第一个栈(StackPush)作为压入栈,压入数据的时候只往这个栈中压入数据,第二个栈作(StackPop)为弹出栈,在弹出数据的时候只从这个栈中弹出。在弹出之前,把压入栈的数据全部 弹出至 弹出栈,再把弹出栈的数据弹出。
代码:
<?php class TwoStacksQueue {
//压入栈
private $StackPush = array();
//弹出栈
private $StackPop = array(); //压入栈 压入数据
public function add($pushInt) {
array_push($this->StackPush, $pushInt);
} //将数据从压入栈 倒入 弹出栈
public function poll() {
if (empty($this->StackPush) && empty($this->StackPop)) {
echo 'Queue is empty.';
exit();
} else if (empty($this->StackPop)) {
while (!empty($this->StackPush)) {
$pop = array_pop($this->StackPush);
array_push($this->StackPop, $pop);
}
}
} //查看弹出栈的栈顶元素
public function peek() {
if (empty($this->StackPush) && empty($this->StackPop)) {
echo 'Queue is empty.';
exit();
} else if (empty($this->StackPop)) {
while (!empty($this->StackPush)) {
$pop = array_pop($this->StackPush);
array_push($this->StackPop, $pop);
}
}
$count = count($this->StackPop);
return $this->StackPop[$count - 1];
} //查看压入栈
public function getStackPush() {
return $this->StackPush;
} //查看弹出栈
public function getStackPop() {
return $this->StackPop;
}
} $queue = new TwoStacksQueue();
$queue->add(1);
$queue->add(2);
$queue->add(3);
$queue->add(4);
$queue->add(5);
var_dump($queue->getStackPush());
$queue->poll();
var_dump($queue->getStackPush());
var_dump($queue->getStackPop());
var_dump($queue->peek());
输出:
array
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
array
empty
array
0 => int 5
1 => int 4
2 => int 3
3 => int 2
4 => int 1
int 1
算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列的更多相关文章
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
刚入手了一本<程序员代码面试指南>,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象. 题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈, ...
- 菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的 ...
- 剑指offer 5.栈和队列 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:1,整体思路是元素先依次进入栈1,再从栈1依次弹出到栈2,然后弹出栈2顶部的元素,整个过程 ...
- [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现
Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- 用两个栈实现队列(C++ 和 Python 实现)
(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 a ...
- C++版 - 剑指offer 面试题7:用两个栈实现队列 题解
用两个栈实现队列 提交网址: http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=1 ...
- 《剑指Offer》-005 -用两个栈实现队列
如题 (总结要点) 用两个栈实现队列 栈; 先进后出 队列: 先进先出 两个栈, 相等于两个杯子; 把一本水倒来倒去, 取到杯子底部的元素,并且删除,再倒回去 原文链接 : 借鉴学习文章列表 链接1: ...
- 剑指offer--3.用两个栈实现队列
快速刷一遍,先捏软柿子 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...
随机推荐
- delphi 对Tmemo指定的行写入
mmoMonitor:Tmemo; mmoMonitor.Lines.ValueFromIndex[0]:=aInfo ; procedure TMainForm.LogInfo(aInfo: str ...
- iOS LoginDemo
// // ViewController.m // FicowLoginDemo1 // // Created by Ficow on 15/11/12. // Copyright © 2015年 F ...
- UVa12633 Super Rooks on Chessboard(容斥 + FFT)
题目 Source http://acm.hust.edu.cn/vjudge/problem/42145 Description Let’s assume there is a new chess ...
- Shell 编程基础之括号的作用
一.小括号() 单小括号 命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必 ...
- Validator验证Ajax提交表单的方法
Validator验证Ajax提交表单的方法 转自:http://hunanpengdake.iteye.com/blog/1671360 当我们在一些稍微复杂的业务时,可能会遇到需要多个表单form ...
- Visual Studio: Show Solution Platform in Toolbar
link: http://stackoverflow.com/questions/7516755/solution-configuration-but-not-platform-in-vs2010-t ...
- BZOJ2190 & 欧拉函数
题意: 求1-n内互质数对个数 SOL: 裸欧拉函数,还有莫比乌斯反演的加速什么的,挖个坑. Code: /*============================================= ...
- Coder-Strike 2014 - Round 1 B. Network Configuration
题目的意思就是给每台电脑的最大传输速度,可以限制每台电脑的最大速度,然后选择k台电脑,使这k台电脑有相同的速度,且这个速度最大 典型的贪心算法,电脑的速度排个序,选择第k大速度即可 #include ...
- ACM Coin Test
Coin Test 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 As is known to all,if you throw a coin up and let ...
- jQuery的事件委托实例分析
事件委托主要是利用事件冒泡现象来实现的,对于事件委托的精准的掌握,可以有利于提高代码的执行效率.先看一段代码实例: <!DOCTYPE html> <html> <hea ...