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

PHP實現棧(Stack)數據結構

編輯:關於PHP編程

棧(Stack),是一種特殊的後進先出線性表,其只能在一端進行插入(插入一般稱為壓棧、進棧或入棧)和刪除(刪除一般稱為彈棧、退棧或出棧)操作,允許進行插入和刪除操作的一端稱為棧頂,另一端則稱為棧底。棧,按照後進先出的原則存儲數據,先進入的數據被壓入棧底,後進入的數據則在棧頂,需要讀取數據的時候,從棧頂開始彈出數據。當棧中沒有元素時,稱為空棧。

數據結構與算法(PHP實現) - 棧(Stack) 1
 <?php
/**
 * 數據結構與算法(PHP實現) - 棧(Stack)。
 *
 * @author 創想編程(TOPPHP.ORG)
 * @copyright Copyright (c) 2013 創想編程(TOPPHP.ORG) All Rights Reserved
 * @license http://www.opensource.org/licenses/mit-license.php MIT LICENSE
 * @version 1.0.0 - Build20130607
 */
class Stack {
  /**
   * 棧。
   *
   * @var array
   */
  private $stack;
 
  /**
   * 棧的長度。
   *
   * @var integer
   */
  private $size;
 
  /**
   * 構造方法 - 初始化數據。
   */
  public function __construct() {
    $this->stack = array();
    $this->size = 0;
  }
 
  /**
   * 壓棧(進棧、入棧)操作。
   *
   * @param mixed $data 壓棧數據。
   * @return object 返回對象本身。
   */
  public function push($data) {
    $this->stack[$this->size++] = $data;
 
    return $this;
  }
 
  /**
   * 彈棧(退棧、出棧)操作。
   *
   * @return mixed 空棧時返回FALSE,否則返回棧頂元素。
   */
  public function pop() {
    if (!$this->isEmpty()) {
      $top = array_splice($this->stack, --$this->size, 1);
 
      return $top[0];
    }
 
    return FALSE;
  }
 
  /**
   * 獲取棧。
   *
   * @return array 返回棧。
   */
  public function getStack() {
    return $this->stack;
  }
 
  /**
   * 獲取棧頂元素。
   *
   * @return mixed 空棧時返回FALSE,否則返回棧頂元素。
   */
  public function getTop() {
    if (!$this->isEmpty()) {
      return $this->stack[$this->size - 1];
    }
 
    return FALSE;
  }
 
  /**
   * 獲取棧的長度。
   *
   * @return integer 返回棧的長度。
   */
  public function getSize() {
    return $this->size;
  }
 
  /**
   * 檢測棧是否為空。
   *
   * @return boolean 空棧則返回TRUE,否則返回FALSE。
   */
  public function isEmpty() {
    return 0 === $this->size;
  }
}
?>

示例代碼 1
  <?php
$stack = new Stack();
$stack->push(1)->push(2)->push(3)->push(4)->push(5)->push(6);
echo '<pre>', print_r($stack->getStack(), TRUE), '</pre>';
 
$stack->pop();
echo '<pre>', print_r($stack->getStack(), TRUE), '</pre>';
?>

說明:PHP數組函數已有類似棧的功能函數存在:array_push(壓棧)和、array_pop(彈棧)。

 

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