用栈实现队列
题干:使用栈实现队列的下列操作:
- push(x) – 将一个元素放入队列的尾部。
- pop() – 从队列首部移除元素。
- peek() – 返回队列首部的元素。
- empty() – 返回队列是否为空。 示例: ```php MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
说明:
你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
##### 解题思路
定义两个栈,一个输入栈,一个输出栈,输入栈保存输入的内容,然后输出栈是输入栈逆序之后的数据,输出栈直接采用正常栈的操作就行,反正已经逆序了。
**PHP 实现**
```php
class MyQueue {
private $inStack;
private $outStack;
/**
* Initialize your data structure here.
*/
function __construct() {
$this->inStack = new SplStack();
$this->outStack = new SplStack();
}
/**
* Push element x to the back of queue.
* @param Integer $x
* @return NULL
*/
function push($x) {
$this->inStack->push($x);
}
/**
* Removes the element from in front of queue and returns that element.
* @return Integer
*/
function pop() {
if ($this->outStack->isEmpty()) {
$this->shift();
}
return $this->outStack->pop();
}
/**
* Get the front element.
* @return Integer
*/
function peek() {
if ($this->outStack->isEmpty()) {
$this->shift();
}
return $this->outStack->top();
}
private function shift()
{
while (!$this->inStack->isEmpty()) {
$this->outStack->push($this->inStack->pop());
}
}
/**
* Returns whether the queue is empty.
* @return Boolean
*/
function empty() {
return $this->inStack->isEmpty() && $this->outStack->isEmpty();
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* $obj = MyQueue();
* $obj->push($x);
* $ret_2 = $obj->pop();
* $ret_3 = $obj->peek();
* $ret_4 = $obj->empty();
*/
最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券