算法与数据结构题目的 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 热度 ...
随机推荐
- sqoop学习
最近学习了下这个导数据的工具,但是在export命令这里卡住了,暂时排不了错误.先记录学习的这一点吧 sqoop是什么 sqoop(sql-on-hadoop):是用来实现结构型数据(如关系型数据库) ...
- Codeforces Round #348(VK Cup 2016 - Round 2)
A - Little Artem and Presents (div2) 1 2 1 2这样加就可以了 #include <bits/stdc++.h> typedef long long ...
- Windows 8 系统安装
系统城 http://www.xitongcheng.com/win8/ 1. 下载 win8: http://msdn.itellyou.cn/2. 准备 4G 以上 U 盘,下载 win8 ...
- CodeForceS#276-A
A. Factory One industrial factory is reforming working plan. The director suggested to set a mythi ...
- CF#335 Lazy Student
Lazy Student time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Excel: 公式
单元格内输入 = xx公式 e.g =EXACT(C2,D2) //比较两个单元格内的文本是否相同
- A hard puzzle
A hard puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- linux安装SVN
1. 下载软件包 http://archive.apache.org/dist/subversion/ http://archive.apache.org/dist/subversion/subver ...
- CentOS6.4 安装SSDB
1.安装 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssd ...
- Redis的两个小技巧
1.通配删除相同前缀的缓存 DEL命令的参数不支持通配符,但我们可以结合Linux的管道和xargs命令自己实现删除所有符合规则的键. 比如要删除所有以“structure_”开头的键,就可以执行下面 ...