概念:栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶。对栈的基本操作有push 和Pop,前者进栈相当于插入操作,后者出栈相当于删除操作。栈也是种进过变种的线性表(后进先出)
下图表示进过诺干操作过后一个抽象的栈,
<?php
/**
* Created by PhpStorm.
* User: think
* Date: 2016/2/14
* Time: 16:41
*/
class Stack {
private $top=-1; //默认是-1,表示该栈是空的
private $maxSize=5; //$maxSize表示栈最大容量
private $stack=array();
//入栈的操作
public function push($val){
//先判断栈是否已经满了
if($this->top==$this->maxSize-1){
echo'<br/>栈满,不能添加';
return;
}
$this->top++; //先加再放
$this->stack[$this->top]=$val; //就入栈了
}
//出栈的操作,就是把栈顶的值取出
public function pop(){
//判断是否栈空
if($this->top==-1){
echo'<br/>栈空';
return;
}
//把栈顶的值,取出
$topVal=$this->stack[$this->top];
$this->top--;
return $topVal;
}
//显示栈的所有数据的方法
public function showStack(){
if($this->top==-1){
echo'<br/>栈空';
return;
}
echo'<br/>当前栈的情况是...';
for($i=$this->top;$i>-1;$i--){ //反着显示
echo'<br/>stack['.$i.']='.$this->stack[$i]; //从栈顶开始显示
}
}
}
$mystack=new Stack;
$mystack->push('test1');
$mystack->push('test2');
$mystack->push('test3');
$mystack->push('test4');
$mystack->push('test5');
$mystack->push('test6');
//$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
/*$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();
$val=$mystack->pop();
echo'<br/>pop出栈了一个数据'.$val;
$mystack->showStack();*/