画江湖之数据结构 [第二话:队列和栈] 栈
队列和栈
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);
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 5年前 加精
栈, 压子弹,小时候加煤球
队列,饭堂,银行 排队 :joy: