算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
刚入手了一本《程序员代码面试指南》,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象。
题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
要求:
① pop、push、getMin 操作的时间复杂度都是 O(1)
② 设计的栈类型可以使用现成的栈结构
PHP 当中没有栈和队列的概念(5.3 以后增加了 SplStack 类),但是可以用数组来模拟栈和队列,用到的方法有 array_push 和 array_pop
array_push:向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度
array_pop:array_pop() 函数删除并返回数组中的最后一个元素
代码:
<?php
class MyStack1 {
//普通栈
private $stackData = array();
//保存每一步最小值的栈
private $stackMin = array();
//向栈中压入数据
public function push($newNum) {
//向保存最小值的栈中压入数据
if(empty($this->stackMin)) {
array_push($this->stackMin, $newNum);
}else if($newNum <= $this->getMin()) {
array_push($this->stackMin, $newNum);
}
//向普通栈中压入数据
array_push($this->stackData, $newNum);
}
//弹出栈顶元素
public function pop(){
try {
if(empty($this->stackData)) {
throw new Exception('Your stack is empty.');
}else{
//普通栈出栈
while(!empty($this->stackData)) {
$val = array_pop($this->stackData);
if($val == $this->getMin()) {
$value = $val;
}
}
return $value;
}
}catch(Exception $e) {
echo $e->getMessage();
}
}
//返回栈中的最小元素
public function getMin() {
try {
if(empty($this->stackMin)) {
throw new Exception('Your stack is empty.');
}else{
//返回栈顶元素
$count = count($this->stackMin);
return $this->stackMin[$count - 1];
}
}catch(Exception $e) {
echo $e->getMessage();
}
}
//查看普通栈
public function getStackData() {
return $this->stackData;
}
//查看保存最小值的栈
public function getStackMin() {
return $this->stackMin;
}
}
实例化并查看最小值:
$myStack1 = new MyStack1(); $myStack1->push(3);
$myStack1->push(4);
$myStack1->push(5);
$myStack1->push(1);
$myStack1->push(2);
$myStack1->push(1);
$myStack1->push(6); echo '弹出之前<br />';
echo 'StackData:';
var_dump($myStack1->getStackData());
echo 'StackMin:';
var_dump($myStack1->getStackMin()); echo '**********<br />';
echo '最小值是:',$myStack1->pop(),'<br />';
echo '**********<br /><br />'; echo '弹出之后<br />';
echo 'StackData:';
var_dump($myStack1->getStackData());
echo 'StackMin:';
var_dump($myStack1->getStackMin());
输出:
弹出之前
StackData:
array
0 => int 3
1 => int 4
2 => int 5
3 => int 1
4 => int 2
5 => int 1
6 => int 6
StackMin:
array
0 => int 3
1 => int 1
2 => int 1
**********
最小值是:1
********** 弹出之后
StackData:
array
empty
StackMin:
array
0 => int 3
1 => int 1
2 => int 1
算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈的更多相关文章
- 栈和队列----设计一个有getMin功能的栈
设计一个有getMin功能的栈 设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1). package ...
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 设计一个有getMin功能的栈
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第一章中“设计一个有getMin功能的栈”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明 ...
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- 栈和队列问题:设计一个有 getMin 功能的栈
[知识点] 栈是一个先进后出(FILO-First In Last Out)的数据结构,队列是一种先进先出(FIFO-First In First Out)的数据结构. [题目] 实现一个特殊的栈,在 ...
- 设计一个有getMin功能的栈(1)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- 设计一个带有getmin功能的栈,保证时间复杂度在O(1)
2017-06-22 20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立 ...
- 设计一个有getMin功能的栈(2)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- stack_1.设计一个有getMin功能的栈
思路 : 生成两个栈($stack ,$stack_min ),往$stack塞数据($value)的时候 ,比较一下$value和$stack_min最上面的元素的大小,如果$value小,则压入$ ...
随机推荐
- Vigenère 密码(luogu 1079)
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- HTML基础2 表单和框架
表单: <form id="" name="" method="post/get" action"负责处理的服务端" ...
- PIGOSS
http://blog.sina.com.cn/s/blog_865bc4c60102wkb1.html
- HTTP协议中状态码的应用
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. 所有状态码的第一个数字代表了响应的五种状态之一. Mark from 维基百科 消息 ...
- windows休眠命令
windows休眠命令 rundll32 powrprof.dll,SetSuspendState windows关闭休眠功能命令:powercfg -h off 1 打开“控制面板”→“电源选项”, ...
- WebService站点服务的地址
天气的地址 http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
一.七说八说 大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...
- 关于遍历javascript 中的json串浏览器输出的结果不统一的情况
我们在做项目的时候经常会用到javascript的json. 首先说一下javascript的json串是什么,json串属于javascript的一个对象,有键和值对应的对象. 一般的格式是: a ...
- UVa10917 A Walk Through the Forest(SPFA+记忆化搜索)
题目给一张有向图,问从起点1到终点2沿着合法的路走有种走法,合法的路指从u到v的路,v到终点的距离严格小于u到终点的距离. 先SPFA预处理出所有合法的路,然后这些路肯定形成一个DAG,然后DP一下就 ...
- BZOJ4327 : JSOI2012 玄武密码
对所有询问串建立AC自动机. 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针能到的所有前缀都是匹配成功的,暴力向上走,碰到走过的就break,这样每个点最多只会被标记一次. 时 ...