您的位置:首页 > 职场人生

韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理

2012-12-16 01:06 1166 查看
文西马龙: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数据结构和算法中文第二版

韩顺平_PHP程序员玩转算法公开课_学习笔记_源代码图解_PPT文档整理_目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐