您的位置:首页 > 编程语言 > Lua

用php完成LeetCode – Evaluate Reverse Polish Notation

2017-03-07 23:34 423 查看
以我写的前一篇的‘关于php中栈的基本操作’ http://blog.csdn.net/martinhacker/article/details/60781815 完成的leetcode 的一道栈的问题,phper可以参考一下。

题目:http://www.programcreek.com/2012/12/leetcode-evaluate-reverse-polish-notation/

<?php
/**
* Created by PhpStorm.
* User: user
* Date: 07/03/2017
* Time: 21:35
*/

class node{
private $value;
private $pre;
public function __construct($value){
$this->value = $value;
$this->pre = null;
}
public function addPre($node){
$this->pre = $node;
}
public function getPre(){
return $this->pre;
}
public function getValue(){
return $this->value;
}
}

class stack{
private $top;
static public $size;
public function __construct($value = null){
$this->top = new node($value);
}

public function push($value){
$current = $this->top;
$newNode = new node($value);
$newNode->addPre($current);
$this->top = $newNode;
}

public function getAllStack(){
$stack = null;
$current = $this->top;
while ($current->getPre() != null){
$stack .= $current->getValue()."\n";
$current = $current->getPre();
}
return $stack;
}

public function getSize(){
$current = $this->top;
while (null != $current->getValue()){
self::$size++;
$current = $current->getPre();
}
return self::$size;
}

public function pop(){
$tmp = $current = $this->top;
$this->top = $current->getPre();
unset($current);
return $tmp->getValue();
}

public function getTop(){
return $this->top->getValue();
}

public function isempty(){
if (null == $this->getTop()){
return false;
}
return true;
}
}

class stackReverse{
public function calculate($arrs){
$stack = new stack();
$operator = '+-*/';
foreach ($arrs as $arr){
if (!strstr($operator, $arr)){
$stack->push($arr);
}else{
if ($stack->isempty()){
$a = $stack->pop();
$b = $stack->pop();
switch ($arr){
case '+':
$stack->push($a + $b);break;
case '-':
$stack->push($a - $b);break;
case '*':
$stack->push($a * $b);break;
case '/':
$stack->push($a / $b);break;
}
}
}
}
return $stack->getTop();
}
}

$stackReverse = new stackReverse();
$arrs = [4, 13, 5, "/", "+"];
$res = $stackReverse->calculate($arrs);
var_dump($res);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php leetcode