栈结构
一、栈的定义、特点
1、定义:
栈又称为栈或者堆叠,是计算机科学中的一种特殊的串列形式的抽象数据类型,特殊之处在于只允许在链表或者数组的一端堆栈顶端指针,又称 “top”)加入数据push(压栈)和输出数据pop(弹栈),另外栈也可以使用一维数组和链表来实现。
2.栈的特点:
a.先进后出(后进先出),也就是说,我们只能在栈顶端push(压栈)加入数据,也只能在栈顶端pop(弹栈)删除数据;
b.栈除了top(栈顶)和base(栈底)之外,其他的每个元素都有一个前驱和后继;
<?php
class Stack
{
private $stackArr = []; //存储栈元素
private $top = -1; //栈顶元素位置
private $stackLen = 10; //栈的长度
private $out = null; //存储出栈元素
/**
* Stack constructor. 构造函数
* @param null $stackLen 栈的长度
*/
public function __construct($stackLen = null)
{
if (!preg_match("/^[1-9][0-9]*$/", $stackLen)) {
die('长度必须为正整数');
}
if ($stackLen == null) {
$this->stackLen = 10;
}
$this->stackLen = $stackLen;
$this->out = null;
}
/**
* 入栈操作
* @param string $data 入栈元素
* @return string 返回栈顶值
*/
public function pushStack($data = '')
{
if (empty($data)) {
return "入栈元素不能为空";
}
if ($this->top == $this->stackLen) {
return "栈满";
}
array_push($this->stackArr, $data);
++$this->top;
return "入栈成功,当前栈顶值:" . $this->top;
}
/**
* 出栈操作
* @return string 返回当前栈顶值和出栈元素
*/
public function popStack()
{
if ($this->top == -1) {
return "栈内无数据";
}
$this->out = array_pop($this->stackArr);
--$this->top;
return "出栈成功,当前栈顶值:" . $this->top . ',出栈元素为:' . $this->out;
}
/**
* 获取栈元素
* @return array 返回当前栈
*/
public function getStack()
{
return $this->stackArr;
}
/**
* 析构函数:仅当当前对象被销毁时调用
*/
public function __destruct()
{
return "栈对象被销毁";
}
}
//测试
$stack = new Stack(1);
var_dump($stack->pushStack(121).'<br />');
var_dump($stack->pushStack(34).'<br />');
var_dump($stack->pushStack(45).'<br />');
var_dump($stack->pushStack(7).'<br />');
var_dump($stack->getStack());
var_dump($stack->popStack().'<br />');
var_dump($stack->popStack().'<br />');
var_dump($stack->popStack().'<br />');
var_dump($stack->getStack());