PHP 程序员学数据结构与算法之《栈》
来源:互联网 发布:人工智能的危害英文 编辑:程序博客网 时间:2024/06/05 15:34
https://www.cnblogs.com/baochuan/archive/2012/06/02/2530386.html
介绍
“要成高手,必练此功”。
要成为优秀的程序员,数据结构和算法是必修的内容。而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈操作array_pop,进栈操作array_push,都有指定的库函数,导致我们对基础算法的研究越来越少,最后成为一个工具的傀儡而已。
所以我还是建议更多的coder从基础开始学习。这篇就先讲我们最熟悉的栈操作开始入手,让我们熟悉栈。
栈为何物?
口诀“后进先出”,这是我印象最深的一句话,也是老师一坨讲解中,印象最深刻的。
定义:栈是限制插入和删除都只能发生在一个位置上进行的线性表,该位置是线性表的末端,叫做栈的顶。
过程:先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
分析
通过定义和过程,我们分析出数据结构(红色标识),动作部分(蓝色标识),以及动作的规则(黄色标识)。
请看
组成成分
数据:线性表(用array结构保存命名为data),末端索引(用int结构保存命名为end,初始值为null——因为开始线性表是没有元素的,所以就没有末端索引这么一说,而且由于不断取数据,添加数据,这个末端是变化的元素。)。
动作(方法):压入(push:规则,放在线性表最后面),弹出(pop:规则,从最后取出,并且末端位置向前移动)。
编码
运行结果
总结
以上是本人对栈的分析理解过程,由于我是一名php coder,所以我用php的角度去分析和编码。
如果是C语言去编码,数组应该指定最大宽度,因为C语言数组不像php数组能自行增长,必须要有一个初始宽度。
class stack{
private $_data=array();
private $_end=null;
public function push($data){
if($this->_end===null)
$this->_end=0;
else
$this->_end++;
$this->_data[$this->_end]=$data;
}
public function pop(){
if(empty($this->_data))return false;
$ret=$this->_data[$this->_end];
array_splice($this->_data,$this->_end);
$this->_end--;
return $ret;
}
public function getData(){
return $this->_data;
}
}
$stack=new stack();
$stack->push('zhang');
$stack->push('dao');
$stack->push('hong');
$stack->pop();
var_dump($stack->getData());
private $_data=array();
private $_end=null;
public function push($data){
if($this->_end===null)
$this->_end=0;
else
$this->_end++;
$this->_data[$this->_end]=$data;
}
public function pop(){
if(empty($this->_data))return false;
$ret=$this->_data[$this->_end];
array_splice($this->_data,$this->_end);
$this->_end--;
return $ret;
}
public function getData(){
return $this->_data;
}
}
$stack=new stack();
$stack->push('zhang');
$stack->push('dao');
$stack->push('hong');
$stack->pop();
var_dump($stack->getData());
阅读全文
0 0
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- 数据结构与算法之栈
- 数据结构与算法之递归算法 C++和PHP实现
- Android程序员必备-数据结构与算法之冒泡排序
- 程序员求职之道(《程序员面试笔试宝典》)之数据结构与算法(排序算法)?
- 程序员求职之道(《程序员面试笔试宝典》)之数据结构与算法(排序算法)?
- 数据结构与算法之----栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 《一起学》系列5:算法与数据结构
- 学数据结构与算法推荐的书
- FMI飞马网 | 人工智能/大数据/程序/语言/项目管理/机器学习/Python书籍免费赠书
- 理解矩阵3
- oracle 数据库导入导出
- 何时使用 Em 与 Rem
- SpringMVC
- PHP 程序员学数据结构与算法之《栈》
- 【转】windows 新版xgboost Python包安装教程 win10 64
- Android 获取OnItemClick事件中组件的内容
- ECSHOP的安全检测代码
- Recyclerview adapter.notify几个方法内存占用分析
- springboot微服务搭建(一):整合mybatis配置(第一种方式)
- 双十一,几何画板加入购物车了吗?
- 使用Thinkphp解决group和count一起使用的问题
- React 16.0中的新特性——portal及其注意点