文西马龙:http://blog.csdn.net/wenximalong/
堆栈——快速入门
用数组模拟栈的使用(1)
由于堆栈是一种有序列表,当然可以使用数组的结构来存储堆栈的数据内容,堆栈数组的声明如下:
$myStack=array(); //声明
$top=-1; //当前操作的那个元素
其中MaxSize是该堆栈的最大容量。后面将会以MaxSize-1的值MaxTop作为堆栈最大顶端指针。虽然数组结构可直接使用下标来存取数据,但在此将数组视为堆栈,故只能从堆栈的顶端进行处理。所以需要一个变量来记录目前堆栈顶端的索引值。初始值设为-1表示堆栈为空,top会随着堆栈中数据量的移动改变其指向顶端的位置。
注:一般说,现在的编程语言都提供了栈的一些基本操作,比如:入栈,出栈。php的数组,本身提供入栈array_push()和出栈array_pop和print_r()的方法,但是在此我们自己来用最基础的方法来实现。
demo1.php
<?php
$stack=array("orange","banana");
array_push($stack,"apple","葡萄");
echo"<pre>";
print_r($stack);
echo"</pre>";
//出栈[把栈顶的数据,取出来]
$val=array_pop($stack);
echo '<br/>栈顶='.$val;
$val=array_pop($stack);
echo '<br/>栈顶='.$val;
echo "<pre>";
print_r($stack);
echo "</pre>";
?>
算法和数据结构能决定你的高度
stack2.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<h1>使用数组来模拟栈的各种操作</h1>
<?php
class MyStack{
private $top=-1; //默认是-1,表示该栈是空的
private $maxSize=5; //$maxSize表示栈最大容量
private $stack=array();
//入栈的操作
public function push($val){
//先判断栈是否已经满了
if($this->top==$this->maxSize-1){ //5-1=4 0 1 2 3 4
echo'<br/>栈满,不能添加';
return;
}
$this->top++; //先加再放
$this->stack[$this->top]=$val; //就入栈了
}
//出栈的操作,就是把栈顶的值取出
public function pop(){
//判断是否栈空
if($this->top==-1){
echo'<br/>栈空';
return;
}
//把栈顶的值,取出
$topVal=$this->stack[$this->top];
$this->top--;
return $topVal;
}
//显示栈的所有数据的方法
public function showStack(){
if($this->top==-1){
echo'<br/>栈空';
return;
}
echo'<br/>当前栈的情况是...';
for($i=$this->top;$i>-1;$i--){ //反着显示
echo'<br/>stack['.$i.']='.$this->stack[$i]; //从栈顶开始显示
}
}
}
$mystack=new MyStack;
$mystack->push('西瓜');
$mystack->push('香蕉');
$mystack->push('橘子');
$mystack->push('苹果');
$mystack->push('草莓');
$mystack->push('樱桃');
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
?>
</body>
</html>
总结:首先使用环形链表,解决约瑟夫问题,然后我们分析了在php对象传递的原理,后面我们自己使用数组模拟一个栈的操作==>目标使用我们自己的栈,去完成一个综合表达式的计算。
php程序员懂算法和数据结构,很不错!
韩老师推荐的书:
Java数据结构和算法中文第二版