首页 > 试题广场 >

两个队列实现栈

[编程题]两个队列实现栈
  • 热度指数:1584 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请你仅使用两个队列实现一个后入先出的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty),输入数据保证 pop、top函数操作时,栈中一定有元素。
void push(int element) 将元素 element 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
bool empty() 如果栈是空的,返回 true ;否则,返回 false 。

数据范围:操作数量满足,输入的元素满足

示例:
输入:    ["MTY","PSH1","TOP","MTY"]
输出:    ["true","1","false"]
解析:
"MTY"表示当前栈是不是为空=>当前为空,返回"true"
"PSH1"表示将1压入栈中,栈中元素为1
"TOP"表示获取栈顶元素==>返回"1"
"MTY"表示当前栈是不是为空=>当前不为空,返回"false"


注意:
1.你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
2.你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例1

输入

["MTY","PSH1","TOP","MTY"]

输出

["true","1","false"]
from collections import deque
class Solution:
    def __init__(self):
        self.q1  = deque()
        self.q2 =  deque()

    def push(self, element: int) -> None:
        # write code here
        self.q2.append(element)
        while self.q1:
            self.q2.append(self.q1.popleft())
        self.q1, self.q2 = self.q2, self.q1

    def pop(self) -> int:
        # return xx
        return self.q1.popleft()

    def top(self) -> int:
        # return xx
        return self.q1[0]

    def empty(self) -> bool:
        # return xx 
        return not self.q1

发表于 2022-07-10 15:05:13 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.list1 = []
        self.list2 = []

    def push(self, element: int) -> None:
        # write code here
        self.list1.append(element)

    def pop(self) -> int:
        # return xx
        return self.list1.pop()

    def top(self) -> int:
        # return xx
        return self.list1[-1]

    def empty(self) -> bool:
        # return xx
        return len(self.list1) == 0

发表于 2022-04-24 11:27:32 回复(0)