算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈

刚入手了一本《程序员代码面试指南》,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象。

题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作

要求:

① pop、push、getMin 操作的时间复杂度都是 O(1)

② 设计的栈类型可以使用现成的栈结构

PHP 当中没有栈和队列的概念(5.3 以后增加了 SplStack 类),但是可以用数组来模拟栈和队列,用到的方法有 array_push 和 array_pop

array_push:向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度

array_pop:array_pop() 函数删除并返回数组中的最后一个元素
1 <?php
2
3 class MyStack1 {
4
5 //普通栈
6 private $stackData = array();
7 //保存每一步最小值的栈
8 private s t a c k M i n = a r r a y ( ) ; 910 / / 11 p u b l i c f u n c t i o n p u s h ( stackMin = array(); 9 10 //向栈中压入数据 11 public function push( newNum) {
12 //向保存最小值的栈中压入数据
13 if(empty(KaTeX parse error: Expected '}', got 'EOF' at end of input: … array_push(this->stackMin, KaTeX parse error: Expected 'EOF', got '}' at position 22: …); 15 }̲else if(newNum <= KaTeX parse error: Expected '}', got 'EOF' at end of input: … array_push(this->stackMin, KaTeX parse error: Expected 'EOF', got '}' at position 22: …); 17 }̲ 18 //…this->stackData, KaTeX parse error: Expected 'EOF', got '}' at position 17: …ewNum); 20 }̲ 21 22 //弹…this->stackData)) {
27 throw new Exception(‘Your stack is empty.’);
28 }else{
29 //普通栈出栈
30 while(!empty($this->stackData)) {
31 v a l = a r r a y p o p ( val = array_pop( this->stackData);
32 if($val == $this->getMin()) {
33 $value = $val;
34 }
35 }
36 return $value;
37 }
38 }catch(Exception $e) {
39 echo KaTeX parse error: Expected 'EOF', got '}' at position 29: …(); 40 }̲ 41 } 42 4…this->stackMin)) {
48 throw new Exception(‘Your stack is empty.’);
49 }else{
50 //返回栈顶元素
51 c o u n t = c o u n t ( count = count( this->stackMin);
52 return t h i s &gt; s t a c k M i n [ this-&gt;stackMin[ count - 1];
53 }
54 }catch(Exception $e) {
55 echo $e->getMessage();
56 }
57 }
58
59 //查看普通栈
60 public function getStackData() {
61 return $this->stackData;
62 }
63
64 //查看保存最小值的栈
65 public function getStackMin() {
66 return $this->stackMin;
67 }
68 }
实例化并查看最小值:
$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 ‘弹出之前
’;
echo ‘StackData:’;
var_dump( m y S t a c k 1 &gt; g e t S t a c k D a t a ( ) ) ; e c h o S t a c k M i n ; v a r d u m p ( myStack1-&gt;getStackData()); echo &#x27;StackMin:&#x27;; var_dump( myStack1->getStackMin());

echo ‘
’;
echo ‘最小值是:’,$myStack1->pop(),’
’;
echo '


’;

扫描二维码关注公众号,回复: 5006979 查看本文章

echo ‘弹出之后
’;
echo ‘StackData:’;
var_dump( m y S t a c k 1 &gt; g e t S t a c k D a t a ( ) ) ; e c h o S t a c k M i n ; v a r d u m p ( myStack1-&gt;getStackData()); echo &#x27;StackMin:&#x27;; 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

猜你喜欢

转载自blog.csdn.net/gongjiang1/article/details/86571003