1、栈也是一种数据结构
2、相比数组,栈对应的操作是数组的子集3、只能从一端添加元素,也只能从一端取出元素。
4、这一端称为栈顶。
5、栈是一种后进先出的数据机构。
6、Last int first Out (LIFO)
7、在计算机的世界里,栈拥有这不可思议的作用。
一、这里采用php实现栈
1、创建一个接口
interface Stack
{
public function getSize();
public function isEmpty();
public function push();
public function pop();
public function peek();
}
2、实现一个 ArrayStack类
class ArrayStack implements Stack
{
private $stack;
public function __construct()
{
$this->stack = [];
}
public function getSize()
{
return count($this->stack);
}
public function isEmpty()
{
return empty($this->stack);
}
public function push($data = null)
{
array_push($this->stack, $data);
}
public function pop()
{
return array_pop($this->stack);
}
public function peek()
{
return end($this->stack);
}
public function toString()
{
echo '<pre>';
print_r($this->stack);
echo '</pre>';
}
}
3、 代码测试
$stack = new ArrayStack();
for ($i =0 ; $i < 5; $i ++) {
$stack->push($i);
$stack->toString();
}
$stack->pop();
echo $stack->getSize();
echo $stack->isEmpty();
$stack->toString();
4、实现leetcode中的一个面试题:有效的括号
$string = '{([])}';
for ($i = 0; $i < strlen($string); $i ++ ) {
$c = $string[$i];
if ($c == '(' || $c == '{' || $c == '[') {
$stack->push($c);
} else {
if ($stack->isEmpty()) {
return false;
} else {
$topChar = $stack->pop();
if ($c == ')' && $topChar != '(') {
return false;
}
if ($c == ']' && $topChar != '[') {
return false;
}
if ($c == '}' && $topChar != '{') {
return false;
}
}
}
}
$stack->toString();
echo $stack->isEmpty();