淺談PHP數據結構之棧

今天開始進階本身的PHP,首先一切的編程語言都需要修煉本身的「內功」,何爲程序猿的「內功」,我想大概就是數據結構和算法了吧 。畢竟是靈魂,是普通程序猿到高級程序猿的進階。php

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

很少說。直接說主題——「棧」。算法

什麼是棧,所謂棧就是遵循「後進先出」的原則。編程

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

先進棧的最後出棧。數組

用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,測試成功。
小弟僅僅是淺談,假設哪裏不到位還但願請教。數據結構和算法

相關文章
相關標籤/搜索