PHP實現棧(Stack)資料結構_PHP教程

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

資料結構與演算法(PHP實現) - 棧(Stack) 1
/**
* 資料結構與演算法(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
$stack = new Stack();
$stack->push(1)->push(2)->push(3)->push(4)->push(5)->push(6);
echo '

', print_r($stack->getStack(), TRUE), '
';

$stack->pop();
echo '
', print_r($stack->getStack(), TRUE), '
';
?>

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

http://www.bkjia.com/PHPjc/477269.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477269.htmlTechArticle棧(Stack),是一種特殊的後進先出線性表,其只能在一端進行插入(插入一般稱為壓棧、進棧或入棧)和刪除(刪除一般稱為彈棧、退棧...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.