浅谈PHP数据结构之栈

今天開始进阶自己的PHP,首先一切的编程语言都须要修炼自己的“内功”,何为程序猿的“内功”,我想大概就是数据结构和算法了吧 。毕竟是灵魂,是普通程序猿到高级程序猿的进阶。

不多说。直接说主题——“栈”。

什么是栈,所谓栈就是遵循“后进先出”的原则。

先进栈的最后出栈。

用PHP实现栈无需考虑栈溢出的情况,相对来说比較easy实现,例如以下是经过学习和參考后的代码。

<?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;

//php为弱类语言,不用考虑溢出情况

}

//出栈

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 get_stack(){

return $this->data;

}

}

?>

以上就是栈的基本操作,然后顺便利用写出来的栈实现了一个在线十进制转换N工具。(N小于等于10.假设须要进行十进制以上的进制转换须要添加功能)

<?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;

//php为弱类语言,不用考虑溢出情况

}

//出栈

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 get_stack(){

return $this->data;

}

//定义进制转换函数

public function transform($num,$to_num){

$result=NULL;//定义结果

while($num!=0){

$num_y=$num%$to_num;

$num=$num/$to_num;

$this->push($num_y);

if($num<$to_num){

$this->push(intval($num));

$num=0;

}

}

while(!empty($this->get_stack())){

echo $this->pop();

}

return true;

}

}

$a=new Stack;

$b=10;//须要转换的十进制数

$c=5;//须要转换的进制

$result=$a->transform($b,$c);

?>

下面为执行结果为20,測试成功。

小弟仅仅是浅谈,假设哪里不到位还希望请教。

时间: 2024-10-17 15:31:58

浅谈PHP数据结构之栈的相关文章

浅谈Java中的栈和堆

人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数据,栈对应的英文单词是Stack 基本类型 引用类型变量 方法 Java的堆中存储以下类型数据,堆对应的英文单词是Heap 实例对象 在函数中定义的一些基本类型的变量(8种)和对象的引用变量都是在函数的栈Stack内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当

浅谈二叉树遍历的栈方法

  众多周知,对于二叉树的遍历, 一种比较容易理解以及编写的方式就是递归的方式了,下面针对二叉树遍历的中序遍历做一个简单的分析: void travelTree(BiTree T, int deep){ if (T->lchild != NULL) travelTree(T->lchild, ++deep); for (int x = 0; x < deep; x++) { printf("--"); } printf("%c\n", T->

浅谈Java数据结构和算法

今天的突然看集合底层的时候发现了好多算法和数据结构.再次就比较一下和汇总一下. 数据结构分类:线性结构和非线性结构 问题一: 什么是线性和非线性: 我个人的理解是:数据结构中线性结构指的是数据元素之间存在着"一对一"的线性关系的数据结构: 线性结构包括:数组,链表,队列,栈: 非线性结构包括:树,图,表: 详解: 一.线性结构 1.数组 特点:我们都知道数组中的元素在内存中连续存储的,可以根据是下标快速访问元素,因此,查询速度很快,然而插入和删除时,需要对元素移动空间,比较慢. 数组使

浅谈main函数的栈帧

要理解什仫是栈帧首先就要理解什仫是栈? 那仫什仫是栈呢?在数据结构中有一种结构叫栈,它的定义为:仅在表尾进行插入和删除的操作 我们允许插入和删除的一端称为栈顶(esp),另一端则为栈底(ebp),所以栈又被称为后进先出的线性表(LIFO).而且我们知道在内存中空间的分配是从高地址向低地址增长的; 好了说了这仫多的栈那仫什仫是栈帧呢?其实说白了栈帧实际上就是用来记录函数调用过程的信息,是编译器用来实现函数调用过程的的一种数据结构.下图是我对栈帧分布的一点理解,以下都是在VC++6.0版本下测试的:

浅谈PHP数据结构之队列

队列 队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 队列的数据元素又称为队列元素.在队列中插入一个队列元素称为入队.从队列中删除一个队列元素成为出队.由于队列仅仅同意在一段插入.在还有一端删除,所以仅仅有最早进入队列的元素才干最先从队列中删除,故队列又称为先进先出(FIFO-first in first out)线性表. 在PH

浅谈PHP数据结构之单链表

什么是链表?(依据百度词条查询而得) 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每个元素称为结点)组成,结点能够在执行时动态生成.每个结点包含两个部分:一个是存储数据元素的数据域,还有一个是存储下一个结点地址的指针域. 经过查询资料和观摩了站点不同版本号的链表后.小弟自己尝试着写了一个PHP版本号的单链表,希望对大家理解链表有所帮助. <?php //定义结点 class Node{ public $id;//结

《浅谈JavaScript系列》系列技术文章整理收藏

<浅谈JavaScript系列>系列技术文章整理收藏 1浅谈JavaScript中面向对象技术的模拟 2浅谈javascript函数劫持[转自xfocus]第1/3页 3浅谈javascript 面向对象编程 4老鱼 浅谈javascript面向对象编程 5浅谈javascript的数据类型检测 6浅谈Javascript嵌套函数及闭包 7根据一段代码浅谈Javascript闭包 8浅谈JavaScript编程语言的编码规范 9浅谈Javascript面向对象编程 10浅谈JavaScript

浅谈算法和数据结构(1):栈和队列

浅谈算法和数据结构(1):栈和队列 2014/11/03 ·  IT技术                                         · 2 评论                                      ·  数据结构, 栈, 算法, 队列 分享到: 60 SegmentFault D-Day 2015 北京:iOS 站 JDBC之“对岸的女孩走过来” CSS深入理解之relative HTML5+CSS3实现春节贺卡 原文出处: 寒江独钓   欢迎分享原创

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算