232. 用栈实现队列

地址:https://leetcode-cn.com/problems/implement-queue-using-stacks/

<?php

/**
232. 用栈实现队列
使用栈实现队列的下列操作:

push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false
 */
class MyQueue {
    /**
     * Initialize your data structure here.
     */
    private $stackPush;
    private $stackPop;

    function __construct() {
        $this->stackPush = new SplStack();
        $this->stackPop = new SplStack();
    }

    /**
     * Push element x to the back of queue.
     * @param Integer $x
     * @return NULL
     */
    function push($x) {
        $this->stackPush->push($x);
    }

    /**
     * Removes the element from in front of queue and returns that element.
     * @return Integer
     */
    function pop() {
        if ($this->stackPop->isEmpty()){
            $this->shift();
        }
        return $this->stackPop->pop();

    }

    function shift(){
        while(!$this->stackPush->isEmpty()){
            $this->stackPop->push($this->stackPush->pop());
        }
    }

    /**
     * Get the front element.
     * @return Integer
     */
    function peek() {
        if ($this->stackPop->isEmpty()){
            $this->shift();
        }
        return $this->stackPop->top();
    }

    /**
     * Returns whether the queue is empty.
     * @return Boolean
     */
    function empty() {
        return $this->stackPop->isEmpty() && $this->stackPush->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();
 */
$query = new MyQueue();
$query->push(1);
$query->push(2);
echo $query->peek();  // 返回 1
echo $query->pop();   // 返回 1
echo $query->empty(); // 返回 false

原文地址:https://www.cnblogs.com/8013-cmf/p/12680846.html

时间: 2024-10-08 19:06:52

232. 用栈实现队列的相关文章

232. 用栈实现队列 Implement Queue using Stacks

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in front of queue. peek() -- Get the front element. empty() -- Return whether the queue is empty. Notes: You

栈、队列、堆随笔

1/ Leetcode 225 使用队列实现栈 1. 队列的初始化: Queue是接口,队列由链表实现 : Queue<> q = new LinkedList<>(); 2.Queue的基本使用方法: offer        添加一个元素并返回true        如果队列已满,则返回false poll          移除并返问队列头部的元素    如果队列为空,则返回null peek        返回队列头部的元素              如果队列为空,则返回n

LeetCode 232:用栈实现队列 Implement Queue using Stacks

题目: 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element from in

LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部.pop() -- 从队列首部移除元素.peek() -- 返回队列首部的元素.empty() -- 返回队列是否为空. 示例: MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); //

数据结构和算法分析(9)表栈和队列的实际应用(一)

    在接下来的几篇博文中,将介绍表.栈.队列在编程实践中的应用.     (1)表达式求值:     输入一个中缀表达式,操作符包括(+ - * / ^).转化为后缀表达式之后并计算表达式的值: 要求: 1.输入的中缀表达式必须是一个完整的字符串: 2.不限制数字的位数和正负,负数用()括起来: 代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define EmptyT

求表达式的值--栈和队列的应用

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define OK 1 5 #define ERROR 0 6 #define STACK_SIZE 20 7 #define STACK_INCREMENT 10 8 #define QUEUE_SIZE 20 9 10 typedef int Status; 11 12 typedef char StackElemtype; 13 typedef struct Stack{ 14 Sta

栈和队列总结

一 基础知识 1. 均为线性表,可以由数组或链表实现 栈:先进后出,操作均在栈顶进行 队列:先进先出,队尾进,队首出 2.  STL stack & queue stack 常见操作: s.push(x):入栈 (void类型) s.pop(): 出栈 (void类型,只删除,不返回元素) s.top(): 返回栈顶元素 s.size():返回栈元素个数 s.empty() :判断栈是否为空 queue 常见操作: q.push(x): 入队 q.pop(): 出队 (void类型,只删除,不返

数据结构和算法分析(10)表栈和队列的实际应用(二)

    本节继续介绍表.栈.队列在编程实践中的应用.     (1)行编辑程序:(允许用户输入出差错,并在发现错误时可以及时更正.)     功能:接受用户从终端输入的字符型的数据,并存入用户的数据区.由于不能保证不出差错,因此“每接受一个字符即存入用户数据区”的做法不是最恰当的:较好的做法是,设立一个输入的缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区. 算法原理:当用户发现刚刚键入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效:如果发现当前键入的行内差错较多或者

栈和队列数据结构的相互实现[LeetCode]

栈是先进后出,队列是先进后出,这里讨论一下两种数据结构之间的相互实现. 一.用两个栈实现队列 我们用一个栈来实现队列的进队操作(栈A),用另一个栈来实现队列的出队操作(栈B). 1.入队列: 把元素放进栈A即可.假如栈A已满并且栈B为空,可以先把栈A中的所有元素先弹出并放入栈B中:假如栈B不为空,则出错了(不能插入). 2.出队列: 假如栈B不为空,直接弹出.假如栈B为空,由于队列是先进先出的,因此要出队列时,我们要先把栈A中的元素全部放进栈B中,然后再从栈B中弹出栈顶元素. 3.例子: 进行以