1 棧簡介
概括:
- 棧(stack),它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。允許操作的一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱為壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素被稱作出棧或退棧,就是把棧頂元素刪除掉,使其相鄰的下個元素成為新的棧頂元素。
完整程式碼塊:
<?php
class Node{
public $data = null;
public $prev = null;
public function __construct($data){
$this->data = $data;
}
}
class stack{
private $top = null;
public $size = 0;
public function push($data)
{
if($this->top == null){
$this->top = new Node($data);
}else{
$n = new Node($data);
$n->prev = $this->top;
$this->top = $n;
}
$this->size++;
}
public function pop()
{
$data = $this->top->data;
$this->top = $this->top->prev;
$this->size--;
return $data;
}
public function getAll(){
$result = [];
while($this->top){
$result[]=$this->top->data;
$this->top = $this->top->prev;
}
return $result;
}
}
// $s = new stack();
// $s->push("aaaa");
// $s->push("bbb");
// $s->push("dddddd");
// $s->push("cc");
// $s->push("eeee");
// echo '<pre>';
// echo $s->pop();
// var_dump($s->getAll());
//陣列模擬棧
// $stack = [];
// array_push($stack,"aaa");
// array_push($stack,"bbb");
// array_push($stack,"ccc");
// array_push($stack,"ddd");
// array_push($stack,"eee");
// echo array_pop($stack);
// echo array_pop($stack);
2 分析程式碼塊 具體分析到程式碼註釋哦 ~ 棧是先進後出的結構哦
先定義一個節點物件
class Node{
public $data = null;
public $prev = null;
public function __construct($data){
$this->data = $data;
}
}
壓入棧
private $top = null;//尾部
public $size = 0;//棧的大小
public function push($data)
{
if($this->top == null){//如果還沒有棧進去
$this->top = new Node($data);//就把壓入生成的棧給到尾部
}
//如果已經存在棧的話
else{
$n = new Node($data);//先定義一個節點物件
$n->prev = $this->top;//把尾部的棧變成當前插入的棧的上一個
$this->top = $n;//把尾部棧為當前棧
}
$this->size++;//棧的大小+++
}
$s = new stack();
$s->push("aaaa");
$s->push("bbb");
$s->push("dddddd");
$s->push("cc");
$s->push("eeee");
出棧
public function pop()
{
$data = $this->top->data;//直接輸出尾部的棧
$this->top = $this->top->prev;//把尾部的棧的拉到上一個節點
$this->size--;//棧的大小--
return $data;//返回棧的數值
}
// echo $s->pop();
3 利用php的自帶的陣列實現棧
程式碼段 和分析程式碼~
//陣列模擬棧
$stack = [];
array_push($stack,"aaa");//插入到棧
array_push($stack,"bbb");
array_push($stack,"ccc");
array_push($stack,"ddd");
array_push($stack,"eee");
echo array_pop($stack);//從陣列尾部出來一個棧
echo array_pop($stack);