Leetcode 225 Implement Stack using Queues 使用队列实现栈

2024-01-13 11:48

本文主要是介绍Leetcode 225 Implement Stack using Queues 使用队列实现栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题地址

https://leetcode.com/problems/implement-stack-using-queues/

题目描述

Implement the following operations of a stack using queues.
使用队列来实现一个栈,主要包含以下方法:

  • push(x) – Push element x onto stack. 入栈
  • pop() – Removes the element on top of the stack. 出栈
  • top() – Get the top element. 获取栈顶元素
  • empty() – Return whether the stack is empty. 返回栈是否为空

Notes:
注意:

You must use only standard operations of a queue – which means only push to back, peek/pop from front, size, and is empty operations are valid.
只能使用队列的标准操作,即:push 在队尾插入,peek/pop 从队首弹出,size 获取队列大小,empty 是否为空。

You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
假设所有操作都是合法的(例如,不会在栈为空时调用pop和top方法)。

解题思路

使用两个队列来模拟一个栈。假设有两个栈A和B,至少保持其中一个为空。

1. 入栈 push()

当我们插入一个元素x时,将x放入其中为空的队列中,然后把另一个队列中的所有元素按顺序放入这个队列中。如下:

演示 1,2,3,4入栈(1) push(1)--------------       --------------
A:  1                B:               --------------       --------------
(2) push(2)--------------       --------------
A:                   B:  2,1           --------------       --------------
(3) push(3)--------------       --------------
A:  3,2,1             B:                --------------       --------------
(4) push(4)--------------       --------------
A:                   B:  4,3,2,1               --------------       --------------

2. 获取栈顶元素 top() / 出栈 pop()

获取栈顶元素和出栈操作比较简单,由于两个队列中有一个为空,我们只需要从不为空的那个队列中取出或弹出队首的元素即可。

(5) top() ---> return 4--------------       --------------
A:                   B:  4,3,2,1               --------------       --------------
(5) pop()--------------       --------------
A:                   B:  3,2,1               --------------       --------------

3. 是否为空 empty()
当两个队列同时为空时,说明栈为空。

代码

代码真的非常简单

class Stack {
public:// Push element x onto stack.void push(int x) {if (a.empty()) {a.push(x);while (!b.empty()) {a.push(b.front());b.pop();}} else {b.push(x);while (!a.empty()) {b.push(a.front());a.pop();}}}// Removes the element on top of the stack.void pop() {if (a.empty()) b.pop();else a.pop();}// Get the top element.int top() {return a.empty() ? b.front() : a.front();}// Return whether the stack is empty.bool empty() {return a.empty() && b.empty();}
private:// 两个队列模拟一个栈queue<int> a;queue<int> b;
};int main() {cout << "add [1-100] to stack." << endl;Stack s;for (int i = 1; i < 101; ++i) s.push(i);while (!s.empty()) {cout << s.top() << "->";s.pop();}return 0;
}

完整代码 https://github.com/Orange1991/leetcode/blob/master/225/cpp/main.cpp


2015/8/28

这篇关于Leetcode 225 Implement Stack using Queues 使用队列实现栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601353

相关文章

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me