PHP 程序员学数据结构与算法之《栈》
2014-06-12 23:50
176 查看
“要成高手,必练此功”。
要成为优秀的程序员,数据结构和算法是必修的内容。而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈操作array_pop,进栈操作array_push,都有指定的库函数,导致我们对基础算法的研究越来越少,最后成为一个工具的傀儡而已。
所以我还是建议更多的coder从基础开始学习。这篇就先讲我们最熟悉的栈操作开始入手,让我们熟悉栈。
![](http://upload.chinaz.com/2012/0604/1338772566477.png)
栈为何物?
口诀“后进先出”,这是我印象最深的一句话,也是老师一坨讲解中,印象最深刻的。
定义:栈是限制插入和删除都只能发生在一个位置上进行的线性表,该位置是线性表的末端,叫做栈的顶。
过程:先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
![](http://upload.chinaz.com/2012/0604/1338772566372.jpg)
分析
通过定义和过程,我们分析出数据结构(红色标识),动作部分(蓝色标识),以及动作的规则(黄色标识)。
![](http://upload.chinaz.com/2012/0604/1338772566822.png)
请看
![](http://upload.chinaz.com/2012/0604/1338772566506.png)
![](http://upload.chinaz.com/2012/0604/1338772566694.png)
组成成分
数据:线性表(用array结构保存命名为data),末端索引(用int结构保存命名为end,初始值为null——因为开始线性表是没有元素的,所以就没有末端索引这么一说,而且由于不断取数据,添加数据,这个末端是变化的元素。)。
动作(方法):压入(push:规则,放在线性表最后面),弹出(pop:规则,从最后取出,并且末端位置向前移动)。
![](http://upload.chinaz.com/2012/0604/1338772566708.png)
编码
![](http://upload.chinaz.com/2012/0604/1338772566670.png)
![](http://upload.chinaz.com/2012/0604/1338772566153.png)
运行结果
![](http://upload.chinaz.com/2012/0604/1338772566278.png)
![](http://upload.chinaz.com/2012/0604/1338772566967.png)
总结
以上是本人对栈的分析理解过程,由于我是一名php coder,所以我用php的角度去分析和编码。
如果是C语言去编码,数组应该指定最大宽度,因为C语言数组不像php数组能自行增长,必须要有一个初始宽度。
要成为优秀的程序员,数据结构和算法是必修的内容。而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈操作array_pop,进栈操作array_push,都有指定的库函数,导致我们对基础算法的研究越来越少,最后成为一个工具的傀儡而已。
所以我还是建议更多的coder从基础开始学习。这篇就先讲我们最熟悉的栈操作开始入手,让我们熟悉栈。
![](http://upload.chinaz.com/2012/0604/1338772566477.png)
栈为何物?
口诀“后进先出”,这是我印象最深的一句话,也是老师一坨讲解中,印象最深刻的。
定义:栈是限制插入和删除都只能发生在一个位置上进行的线性表,该位置是线性表的末端,叫做栈的顶。
过程:先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
![](http://upload.chinaz.com/2012/0604/1338772566372.jpg)
分析
通过定义和过程,我们分析出数据结构(红色标识),动作部分(蓝色标识),以及动作的规则(黄色标识)。
![](http://upload.chinaz.com/2012/0604/1338772566822.png)
请看
![](http://upload.chinaz.com/2012/0604/1338772566506.png)
![](http://upload.chinaz.com/2012/0604/1338772566694.png)
组成成分
数据:线性表(用array结构保存命名为data),末端索引(用int结构保存命名为end,初始值为null——因为开始线性表是没有元素的,所以就没有末端索引这么一说,而且由于不断取数据,添加数据,这个末端是变化的元素。)。
动作(方法):压入(push:规则,放在线性表最后面),弹出(pop:规则,从最后取出,并且末端位置向前移动)。
![](http://upload.chinaz.com/2012/0604/1338772566708.png)
编码
![](http://upload.chinaz.com/2012/0604/1338772566670.png)
![](http://upload.chinaz.com/2012/0604/1338772566153.png)
运行结果
![](http://upload.chinaz.com/2012/0604/1338772566278.png)
![](http://upload.chinaz.com/2012/0604/1338772566967.png)
总结
以上是本人对栈的分析理解过程,由于我是一名php coder,所以我用php的角度去分析和编码。
如果是C语言去编码,数组应该指定最大宽度,因为C语言数组不像php数组能自行增长,必须要有一个初始宽度。
相关文章推荐
- PHP 程序员学数据结构与算法之《栈》
- 转载 PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP 程序员学数据结构与算法之《栈》
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 韩顺平_PHP程序员玩转算法公开课(第一季)12_双向链表crud操作之_水浒英雄排行_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)08_阶段性就业指导_学习笔记_源代码图解_PPT文档整理
- 在网上看到使用PHP实现常见的数据结构和算法
- 韩顺平_PHP程序员玩转算法公开课(第一季)11_双向链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)06_堆栈在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 也谈谈数据结构和算法,说与立志当好程序员的
- PHP 数据结构 算法描述 冒泡排序 bubble sort
- php 基本数据结构 和 算法
- 在网上看到使用PHP实现常见的数据结构和算法
- 韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理
- PHP 数据结构 算法 三元组 Triplet
- C 数据结构 算法 Java 数据库 PHP JSP Web Dev ... ... 我会坚持走下去的
- 韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)10_使用栈完成高级计算器(2)_学习笔记_源代码图解_PPT文档整理