layout:     posttitle:      PHP 用队列实现栈
subtitle:   PHP 用队列实现栈
date:       2020-05-05
author:     he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- Go
- PHP
- LeetCode
- 用队列实现栈
用队列实现栈
使用队列实现栈的下列操作:
push(x) — 元素 x 入栈
pop() — 移除栈顶元素
top() — 获取栈顶元素
empty() — 返回栈是否为空
注意:你只能使用队列的基本操作— 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
解题思路
和用栈实现队列一样的,一个队列负责入,一个队列负责出,入队列接收参数之后,倒序将参数压入出队列,因为php splqueue 标准库有top,pop这样的方放,也可以直接使用,方便快捷。
额外:以下的代码执行用时和内存消耗打败了100%的玩家,可能PHP提交较少。
PHP 实现
class MyStack {private $inQueue;private $outQueue;/*** Initialize your data structure here.*/function __construct() {$this->inQueue = new SplQueue();$this->outQueue = new SplQueue();}/*** Push element x onto stack.* @param Integer $x* @return NULL*/function push($x) {$this->inQueue->enqueue($x);while (!$this->inQueue->isEmpty()) {$this->outQueue->enqueue($this->inQueue->dequeue());}}/*** Removes the element on top of the stack and returns that element.* @return Integer*/function pop() {return $this->outQueue->pop();}/*** Get the top element.* @return Integer*/function top() {return $this->outQueue->top();}/*** Returns whether the stack is empty.* @return Boolean*/function empty() {return $this->outQueue->isEmpty();}}/*** Your MyStack object will be instantiated and called as such:* $obj = MyStack();* $obj->push($x);* $ret_2 = $obj->pop();* $ret_3 = $obj->top();* $ret_4 = $obj->empty();*/
