韩顺平_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
算法和数据结构能决定你的高度
stack2.php
总结:首先使用环形链表,解决约瑟夫问题,然后我们分析了在php对象传递的原理,后面我们自己使用数组模拟一个栈的操作==>目标使用我们自己的栈,去完成一个综合表达式的计算。
php程序员懂算法和数据结构,很不错!
韩老师推荐的书:
Java数据结构和算法中文第二版
韩顺平_PHP程序员玩转算法公开课_学习笔记_源代码图解_PPT文档整理_目录
堆栈——快速入门
用数组模拟栈的使用(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文档整理_目录
相关文章推荐
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)09_使用栈完成高级计算器(1)_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)06_堆栈在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)11_双向链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)02_单链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)03_单链表crud操作之_水浒英雄排行算法_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)10_使用栈完成高级计算器(2)_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)08_阶段性就业指导_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)04_阶段性答疑解惑_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)12_双向链表crud操作之_水浒英雄排行_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课_学习笔记_源代码图解_PPT文档整理_目录
- 韩顺平_php从入门到精通_视频教程_第13讲_选择器使用细节_块元素和行内元素_盒子模型_盒子模型经典应用①_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第12讲_通配符选择器_父子选择器_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第2讲_html运行原理②_html文件基本结构_html元素和属性_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第4讲_图像_表格_实际应用-菜谱_课堂练习-课程表_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_学习笔记_源代码图解_PPT文档整理_目录
- 韩顺平_php从入门到精通_视频教程_第15讲_di-css作业评讲①_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第8讲_多媒体页面_标签汇总①_地图映射_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理