棧(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),是一種特殊的後進先出線性表,其只能在一端進行插入(插入一般稱為壓棧、進棧或入棧)和刪除(刪除一般稱為彈棧、退棧...