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

不多说。直接说主题——“栈”。
什么是栈,所谓栈就是遵循“后进先出”的原则。

先进栈的最后出栈。
用PHP实现栈无需考虑栈溢出的情况,相对来说比較easy实现,例如以下是经过学习和參考后的代码。
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,測试成功。
小弟仅仅是浅谈,假设哪里不到位还希望请教。
浅谈PHP数据结构之栈的更多相关文章
- 浅谈Java中的栈和堆
人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数 ...
- 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)
虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...
- 浅谈Java数据结构和算法
今天的突然看集合底层的时候发现了好多算法和数据结构.再次就比较一下和汇总一下. 数据结构分类:线性结构和非线性结构 问题一: 什么是线性和非线性: 我个人的理解是:数据结构中线性结构指的是数据元素之间 ...
- 浅谈PHP数据结构之单链表
什么是链表?(依据百度词条查询而得) 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每个元素称为结点)组成,结点能够在执 ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- 浅谈java类集框架和数据结构(2)
继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...
- SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解
数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
- 浅谈Linux中的信号处理机制(二)
首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...
- 浅谈JAVA集合框架
浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...
随机推荐
- misaka and last order SCU - 4489 (筛法的灵活应用)
Time Limit: 1000 MS Memory Limit: 131072 K Description Misaka Mikoto is a main character of the Anim ...
- PHP 笔记——基础
一.PHP 简介 1. PHP是什么 PHP:Hypertext Preprocessor,即超文本预处理器. PHP是一种跨平台.服务器端.可嵌入HTML文件的脚本语言. 嵌入了PHP代码的HTML ...
- 【SDOI2017】树点染色【线段树+LCT】
本来只是想练练LCT,没想到是个线段树 对于操作1:诶新的颜色?这不是access吗? 也就是说,我们用一棵splay来表示一种颜色 操作2直接在LCT上乱搞-- 不对啊,操作3要查子树 诶好像是静态 ...
- python3-开发进阶Flask的基础(2)
知识回顾 1.django 和flask区别? 最大的不同就是django请求相关的数据,通过参数一个一个传递过去的,而flask就是先把放在某个地方,然后去取,这个东西叫上下文管理 2.什么是wsg ...
- Android ConstraintLayout约束控件链接整理
Android新特性介绍,ConstraintLayout完全解析 探索Android ConstraintLayout布局 了解使用Android ConstraintLayout
- hihocoder 1522 : F1 Score
题目链接 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现 ...
- 擦亮自己的眼睛去看SQLServer之谈谈锁机制
http://www.cnblogs.com/yueyue_jwfm/category/292724.html
- 字符串转base64,base64转字符串
[JavaScript原生提供两个Base64相关方法] btoa():字符串或二进制值转为Base64编码 atob():Base64编码转为原来的编码 备注:利用这两个原生方法,我们来封装一下,标 ...
- Homebrew-macOS缺失的软件包管理器(简称brew)
[简介] brew又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,只需要一个简单的命令,非常方便 [遇到的问题] 在真正了解软件包管理工具之前,一直是 ...
- infor系统日常问题解决笔记
1.问题:结算单核准时候显示订单XXX的状态为已修改. 解决方法:在采购订单状态栏重新核准订单,采购订单状态不影响发票核准,结算后不允许再新增采购订单行,否则仍然会提示采购订单状态为已修改,且无法进行 ...