浅谈PHP数据结构之栈

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

http://pic002.cnblogs.com/images/2012/152332/2012060200472563.png

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

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

http://pic002.cnblogs.com/images/2012/152332/2012060111254129.jpg

先进栈的最后出栈。用PHP实现栈无需考虑栈溢出的情况,相对来说比较容易实现,如下是经过学习和参考后的代码。


<?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,测试成功。
小弟只是浅谈,如果哪里不到位还希望请教。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值