客官,留下你的贊;成爲我的粉絲,一起上車哦!評論區歡迎你的留言
重溫數據結構。相關代碼集放在GitHub
上,歡迎Star
、Fork
和一起加入。目前只有PHP版本;後續會增加Golang版本,後續會不斷更新,歡迎指正。
代碼示例
/**
* 順序棧
* 用數組模擬棧的入棧以及出棧
* @author new2014kb
*/
class Stack {
/**
* [$top 指向棧頂,空棧=-1]
* @var integer
*/
public $top = -1;
/**
* [$stackSpace 棧空間]
* @var [type]
*/
public $stackSpace;
/**
* [$stackElement 棧中元素]
* @var array
*/
public $stackElement = [];
/**
* [__construct 初始化操作]
* @Author pengw
* @DateTime 2020-06-21T20:41:32+0800
* @param int|integer $stackSpace [棧空間]
*/
public function __construct(int $stackSpace = 0) {
$this->stackSpace = $stackSpace;
// 初始化並分配棧空間
$this->stackElement = array_fill(0, $stackSpace, NULL);
}
/**
* [push 入棧操作]
* @Author pengw
* @DateTime 2020-06-21T20:42:39+0800
* @param string $element [入棧元素]
* @return [type] [description]
*/
public function push(string $element) {
// 棧空間判斷
if(empty($this->stackSpace)) {
return '未聲明棧空間';
}
// 棧滿
if($this->top == ($this->stackSpace - 1)) {
return '棧滿';
}
// 入棧操作
++$this->top;
$this->stackElement[$this->top] = $element;
return '入棧成功';
}
/**
* [pop 出棧操作]
* @Author pengw
* @DateTime 2020-06-21T20:43:01+0800
* @return [type] [description]
*/
public function pop() {
// 判斷棧空間
if(empty($this->stackSpace)) {
return '未聲明棧空間';
}
// 空棧
if($this->top == -1) {
return '空棧';
}
// 出棧操作
$e = $this->stackElement[$this->top];
$this->stackElement[$this->top] = NULL;
--$this->top;
return $e;
}
/**
* [showStackElement 輸出棧中的元素]
* @Author pengw
* @DateTime 2020-06-21T20:43:24+0800
* @return [type] [description]
*/
public function showStackElement() {
// 判斷棧空間
if(empty($this->stackSpace)) {
return '未聲明棧空間';
}
// 空棧
if($this->top == -1) {
return '空棧';
}
return $this->stackElement;
}
}
測試
$s = new Stack(5);
// 入棧
var_dump($s->push(9)); // 入棧成功
var_dump($s->push(8)); // 入棧成功
var_dump($s->push(7)); // 入棧成功
var_dump($s->push(6)); // 入棧成功
var_dump($s->push(5)); // 入棧成功
var_dump($s->push(4)); // 棧滿
// 出棧之前棧中元素
var_dump($s->showStackElement()); // 9 8 7 6 5
// 出棧
var_dump($s->pop()); // 5
var_dump($s->pop()); // 6
// 出棧後棧中元素
var_dump($s->showStackElement()); // 9 8 7 null null
結果如下