程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP實現雙向鏈表、棧

PHP實現雙向鏈表、棧

編輯:關於PHP編程

PHP實現雙向鏈表、棧


雙向鏈表                                                                                         復制代碼 <?php         //雙向鏈表         class Hero         {             public $pre=null;//前指針             public $no;//排名             public $name;//名字             public $next=null;//後指針                          /**             *構造函數,申明鏈表頭             */             public function __construct($no='',$name='')             {                 $this->no=$no;                 $this->name=$name;             }             /**             *插入             */             static public function addHero($head,$hero)             {                 $cur = $head;                 $isExist=false;                 //判斷目前這個鏈表是否為空                 if($cur->next==null)                 {                     $cur->next=$hero;                     $hero->pre=$cur;                 }                 else                 {                     //如果不是空節點,則安排名來添加                     //找到添加的位置                                 while($cur->next!=null)                     {                         if($cur->next->no > $hero->no)                         {//如果大於了排名,跳出                             break;                         }                         else if($cur->next->no == $hero->no)                         {//如果等於排名,則代表有這個元素了                             $isExist=true;                             echo "<br>不能添加相同的編號";                         }                         $cur=$cur->next;                     }                     if(!$isExist)                     {//如果元素不存在,執行插入操作                         if($cur->next!=null)                         {$hero->next=$cur->next;}                         $hero->pre=$cur;                         if($cur->next!=null)                         {$hero->next->pre=$hero;}                         $cur->next=$hero;                                 }                 }             }             //遍歷             static public function showHero($head)             {                 $cur=$head;                 while($cur->next!=null)                 {                     echo "<br>編號:".$cur->next->no."名字:".$cur->next->name;                     $cur=$cur->next;                 }             }                     static public function delHero($head,$herono)             {                 $cur=$head;                 $isFind=false;                 while($cur!=null)                 {                     if($cur->no==$herono)                     {                         $isFind=true;                         break;                     }                     //繼續找                     $cur=$cur->next;                 }                 if($isFind)                 {                     if($cur->next!=null)                     {$cur->next_pre=$cur->pre;}                     $cur->pre->next=$cur->next;                 }                 else                 {echo "<br>沒有找到目標";}                         }         }         $head = new Hero();         $hero1 = new Hero(1,'1111');         $hero3 = new Hero(3,'3333');         $hero2 = new Hero(2,'2222');         Hero::addHero($head,$hero1);         Hero::addHero($head,$hero3);         Hero::addHero($head,$hero2);         Hero::showHero($head);         Hero::delHero($head,2);         Hero::showHero($head); ?> 復制代碼 雙向鏈表的插入操作示意圖:   if($cur->next!=null)     $hero->next=$cur->next; $hero->pre=$cur;  if($cur->next!=null)     $hero->next->pre=$hero; $cur->next=$hero;     QQ截圖20140706152241   刪除操作示意圖:   if($cur->next!=null)     $cur->next->pre=$cur->pre; $cur->pre->next=$cur->next;     QQ截圖20140706152857   棧                                                                                                 復制代碼 <?php       class myStack     {         private $top=-1;         private $maxSize=5;         private $stack=array();         public function push($val)         {             if($this->top == $this->maxSize)             {                 echo "<br>已經滿了";             }             $this->top++;             $this->stack[$this->top]=$val;         }                  public function showStack()         {             if($this->top==-1)             {                 echo "<br>棧為空!";                 return ;             }             for($i=$this->top;$i>-1;$i--)             {                 echo "<br>stack[".$i."]=".$this->stack[$i];             }         }                  public function pop()         {             if($this->top==-1)             {                 echo "<br>棧為空!";                 return ;             }                          $val=$this->stack[$this->top];             $this->top--;             echo "<br>彈出".$val;         }     }       $mystack = new myStack;     $mystack->push('111');     $mystack->push('222');     $mystack->showStack();     $mystack->pop();     $mystack->pop(); ?> 復制代碼     棧(Stack):是限制在表的一端進行插入和刪除操作的線性表。又稱為後進先出LIFO (Last In First Out)或先進後出FILO (First In Last Out)線性表。   棧在計算機的實現有多種方式:   硬堆棧:利用CPU中的某些寄存器組或類似的硬件或使用內存的特殊區域來實現。這類堆棧容量有限,但速度很快; 軟堆棧:這類堆棧主要在內存中實現。堆棧容量可以達到很大。在實現方式上,又有動態方式和靜態方式兩種 棧頂(Top):允許進行插入、刪除操作的一端,又稱為表尾。用棧頂指針(top)來指示棧頂元素。   棧底(Bottom):是固定端,又稱為表頭。   空棧:當表中沒有元素時稱為空棧。   棧的鏈式存儲結構稱為鏈棧,是運算受限的單鏈表。其插入和刪除操作只能在表頭位置上進行。因此,鏈棧沒有必要像單鏈表那樣附加頭結點,棧頂指針top就是鏈表的頭指針。   當然,php中的數組API裡面帶的有push和pop函數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved