学习下队列,通过栈来实现队列
题起源力扣:https://leetcode-cn.com/probl...
思路:
- 筹备两个栈 inStack、outStack
- 入队时,push 到 inStack 中
出队时,
- (1):如果 outStack是空的,将 inStack 所有的元素逐个弹出,push 到 outStack,outStack 弹出栈顶元素
- (2):如果 outStack 不为空,outStack 弹出栈顶元素
php实现代码
<?php/*** 队列* 应用栈实现队列* https://leetcode-cn.com/problems/implement-queue-using-stacks/* 1:筹备两个栈 inStack、outStack* 2: 入队时,push 到 inStack 中* 3:出队时,* (1):如果 outStack是空的,将 inStack 所有的元素逐个弹出,push 到 outStack,outStack 弹出栈顶元素* (2):如果 outStack 不为空,outStack 弹出栈顶元素*/require '../stack/Stack.php';class Queue{ protected $inStack; protected $outStack; public function __construct() { $this->inStack = new Stack(); $this->outStack = new Stack(); } /** * @param $item * push 一个元素 * 入队 */ public function push($item) { $this->inStack->push($item); } /** * 弹出一个元素 * 出队 */ public function pop() { $this->checkOutStack(); return $this->outStack->pop(); } /** * 获取队头元素 */ public function peek() { $this->checkOutStack(); return $this->outStack->top(); } /** * Returns whether the queue is empty. * @return Boolean */ public function empty() { return $this->inStack->isEmpty() && $this->outStack->isEmpty(); } private function checkOutStack(){ if ($this->outStack->isEmpty()) { // 如果出队(outStack)的栈是空的, 将入队(inStack)的栈元素全副弹出并放到 出队的栈 outStack while (!$this->inStack->isEmpty()) { $this->outStack->push($this->inStack->pop()); } } }}
源代码下载:gitee