C++ 用两个栈实现一个队列

2023-10-27

首先我们要看看栈和队列的特点,栈的特点:先进后出,队列的特点:先进先出。

队列的出队顺序与栈的出栈是相反的,我们把数据压入第一个栈,如果再把这个栈里面的元素依次压入第二个栈,此时栈2里面的元素的顺序,相当于对一组数据进行了两次倒序,此时对第二个栈进行的出栈操作的顺序就相当于这组数据进入队列的顺序了。

大体思路就是这样,接下来看看要实现的队列中的基本操作符。

empty:判断队列是否为空
size:返回当前队列的元素数目
pop:删除队列首元素,但不返回
front:返回首元素,但不删除
back:返回尾元素,但不删除
push:在队尾创建一个元素

这里我创建了一个Stack_Queue类来用两个栈实现队列,类的结构如下

template<typename T>
class Stack_Queue {
public:
	bool empty() const { return s1.empty() && s2.empty(); }
	std::size_t size() const { return s1.size() + s2.size(); }
	void push(const T& t){ s1.emplace(t); }
	void pop();
	const T& front();
	const T& back();

p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 用两个栈实现一个队列 的相关文章

  • 为什么纯虚拟析构函数的实现必须为空?它应该是内联的吗?

    我在其他线程中读到 当您实现纯虚拟析构函数 是的 它可以有一个实现 时 它必须是空的 并且应该 是内联的 应该是空的吗 如果是这样 为什么 应该内联吗 如果是这样 为什么 编辑 这就是纯虚拟析构函数的实现方式 class A virtual
  • 具有自动返回类型推导的 Friend 函数模板无法访问私有成员

    抱歉这个问题的标题太复杂了 我试图描述我为这个问题构建的最小 SSCCE 我有以下代码 include
  • 在 C# 中格式化 Resharper 属性的支持字段

    有没有办法控制 Resharper 放置其支持字段的位置 目前 它试图让他们在班级中名列前茅 我希望他们能去到酒店的正上方 还没有
  • 如何防止 Parallel.ForEach 循环在运行时更改任务数量?

    我正在使用Parallel ForEach循环做一些工作 我用localInit像这样 localInit gt new foo new Foo bars CreateBars 根据文档 https learn microsoft com
  • 从 pdf 和 word 文件中提取文本

    如何在 C 中从 pdf 或 word 文件中提取文本 删除粗体 图像和其他富文本格式媒体 您可以使用专为索引服务设计 由索引服务使用的过滤器 它们旨在从各种文档中提取纯文本 这对于在文档内部进行搜索非常有用 您可以将其用于 Office
  • 具有 Nhibernate 设计问题的领域模型

    我正在尝试进入 DDD with C 世界 我使用NHibernate作为我的ORM工具 因此尝试开发一个PI Persistence Ignorance 模型 但是 在我的一些实体 表示为 POCOS 中 我的属性设置器中有业务规则 例如
  • 如何更改控制台中的光标位置?

    我想用Console ReadLine 在上一行中并使其显示如下 HeresomeText gt input Not like HeresomeText gt input 可以做吗 使用 Write 方法而不是 WriteLine 方法 C
  • 清除指针向量[重复]

    这个问题在这里已经有答案了 假设我定义了一个这样的类 class foo private std vector lt int gt v public void bar1 for int i 0 i lt 10 i int a new int
  • ofstream::operator<<(streambuf) 是一种复制文件的缓慢方法

    我需要一种跨平台 无需外部库的复制文件的方式 在我的第一遍中 我想出了 省略错误处理 char buffer LEN ifstream src srcFile ios in ios binary ofstream dest destFile
  • dotnet core 创建文件名中不含“CoreFxPipe_”的命名管道

    使用以下命令创建命名管道时命名管道客户端流 or 命名管道服务器流dotnet core 的类中 关联的 管道 看起来实际上是一个套接字 已自动将 CoreFxPipe 添加到文件名的前面 有没有一种非黑客的方法来防止这种行为 我只是希望文
  • 在 Visual Studio 2017 mac 上安装扩展 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 Visual Studio for Mac 上安装 Visual Studio Marketplace 扩展 但是 Vi
  • “未定义对 clrscr() 的引用;” [复制]

    这个问题在这里已经有答案了 include
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 如何在运行时统一捕捉两个对象?

    这是 3D 模型 我想将另一个像这样的模型连接到顶部的银色连接器 并将另一个模型连接到右侧 所以请帮助我捕捉它 https i stack imgur com qoWwl png我想知道如何在运行时将两个 3D 对象对齐在一起 即 在 玩
  • 静态成员函数中的封闭类的 C++ 类型

    我认为这是完全不可能的 但如果呢 在任何版本的 C 中 是否有可能以某种方式获取静态成员函数中封闭类的类型 class Impossible public static void Fun typedef Impossible Enclosi
  • COM Interop 挂起会冻结整个 COM 系统。如何取消COM调用

    我正在使用通过 COM Interop 包装器公开的第三方 dll 然而 其中一个 COM 调用经常冻结 至少不会返回 为了至少让我的代码更加健壮 我异步包装了调用 getDeviceInfoWaiter is a ManualResetE
  • Pythonlibs3 CMake 和 macOS

    更新2 将以下两行添加到我的 CMake 文件中时 成功找到了 python 3 及其库 这只在终端中工作的原因是因为 CLion 使用其捆绑版本的 CMake 3 6 3 而我的终端使用的更新版本 3 7 2 正确找到了 python F
  • Windows 安装程序 (C#) 错误代码 2869

    我在 VS 2005 中有一个项目 其中有一个控制台应用程序和一个与安装该应用程序关联的安装项目 我在控制台应用程序中还有一个安装程序类 安装项目将使用它在安装前进行一些验证 这些任务正在检查数据库连接字符串并检查某些目录位置以确保它们在安
  • 如何用纯色填充位图?

    我需要使用唯一的 RGB 颜色创建 24 位位图 分辨率 100x100 像素 并将生成的图像保存到磁盘 我目前使用的是SetPixel http msdn microsoft com en us library 6c7eyzyb aspx
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual

随机推荐

  • 做方差分析需要正态性检验吗_方差分析(SPSS版)

    方差分析 SPSS版 原创 Gently spss学习乐园 2019 10 15 文章同步于 微信公众号 SPSS学习乐园 方差分析 SPSS版 方差分析的基本思想 R A Fisher提出的统计理论基础 将总变异分解为由研究因素所产生的变
  • 计算机系统结构:流水线技术总结

    文章目录 什么是流水线 流水线的分类 流水线的性能指标 流水线设计中的若干问题 非线性流水线的调度 单功能非线性流水线的最优调度 多功能非线性流水线的调度 一条经典的5段流水线 相关与流水线冲突 结构冲突 因硬件资源满足不了指令重叠执行的要
  • 基于Pytorch实现LSTM(多层LSTM,双向LSTM)进行文本分类

    LSTM原理请看这 点击进入 LSTM nn LSTM input size hidden size num layers 1 nonlinearity tanh bias True batch first False dropout 0
  • Cesium加载Supermap的wmts服务

    最近使用cesium 加载supermap的wmts 服务 多次遇到加载异常与白页面问题 纠结好久最后才搞定 特此记录 1 首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvide
  • nginx配置防止域名恶意解析

    前几发生一件事情 就是通过nginx日志发现有一个域名恶意指向到了我的服务器 大家可以去查查域名恶意解析可能会造成的危害 由于我是用的nginx配置了一个反向代理 所以直接配置nginx就可以实现域名恶意解析的问题了 首先打开我们的ngin
  • Hyperledger Fabric 入门笔记(四)Fabric V2.4 测试网络基础

    文章目录 前言 一 准备测试网络 1 1 概述 1 2 完成准备工作 1 2 1 运行install fabric sh脚本 1 2 2 文件夹去锁 可选 1 3 install fabric sh脚本运行结果 1 4 什么是二进制文件 1
  • 计算机毕业设计题目100例

    文章目录 0 前言 1 java web 管理系统 毕设选题 2 java web 平台 业务系统 毕设选题 3 游戏设计 动画设计类 毕设选题 适合数媒的同学 4 算法开发 5 数据挖掘 毕设选题 6 大数据处理 云计算 区块链 毕设选题
  • iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

    1 iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件 不可以去其它地方访问 此区域被成为沙盒 所以所有的非代码文件都要保存在此 例如图像 图标 声音 映像 属性列表 文本文件等 1 1 每个应用程序都有自己的存储空间
  • 移动硬盘安装centos8

    买了个西数固态移动硬盘想要安装centos8 感觉应该很简单没想到也有不少坑 1 下载iso https www centos org download X86 64版本的 CentOS 8 4 2105 x86 64 dvd1 iso 为
  • Java包名与包路径

    很多初学者以为只要把生成的class文件放在某个目录下 这个目录名就成了这个类的包名 这是一个错误的看法 不是有了目录 结构 就等于有了包名 为Java类添加包必须在Java源文件中通过 package语句指定 单靠目录名是没法指定的 Ja
  • Hive对库对表的操作

    目录 前期工作 1 Hive对库的操作 2 Hive对表的操作 3 Hive的分区表 前期工作 需提前启动服务端 hiveserver2 和客户端 beeline u jdbc hive2 192 168 67 110 10000 n ro
  • 如何判断一个请求是否为Ajax请求

    Ajax请求中主要对象 原生对象 是XMLHttpRequest 知道了该对象 那么就可以通过判断请求头属性来鉴别当前请求 判断当前请求是否为Ajax public static boolean isAjaxRequest HttpServ
  • typora文章同步(跨平台)

    typora实现备份 个人博客 一 图片上传 PicGo有提供默认的图床 可以直接使用 但是有上传的限制 有特定要求的可以自己配置github图床 1 配置github图床 利用github搭建图床 2 安装PicGo 下载链接 windo
  • 【判断题】【简答题】【数据库原理】

    文章目录 一 判断题 二 简答题 一 判断题 1 数据的安全性主要防范的对象是合法用户 正确答案 错 2 数据库恢复是利用冗余数据来重建数据库 正确答案 对 3 定义外键级级联是为了保证相关表之间数据的一致性 正确答案 对 4 创建唯一性索
  • React小技巧-React.memo useMemo useCallback

    React小技巧 React memo useMemo useCallback 原文 https piyushsinha tech series optimizing react ck subscriber id 1555690090 本文
  • TV服务器的安装维护和调试,广电机顶盒安装调试教程及系统设置密码

    QQ截图20160813140648 png 931 06 KB 下载次数 3 2016 8 13 14 43 上传 电视机与机顶盒正确连接后 打开电视机和机顶盒的电源开关 并按电视机遥控器的视频切换键 TV 切换到IPTV界面 第一步 进
  • Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示 1 普通可视化界面编程代码入门 import sys from PyQt5 QtWidgets import QWidget QApplication 导入两个类来进行程序界面编程 if n
  • leetcode 5 最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 解析 这道题和之前的那道回文的很像 647回文子
  • Vue2.0教程

    一 Vue入门 1 概述 在众多的语言排名中 JavaScript 已经非常靠前 它是前端的核心编程语言 我们可以利用 js 开发 动态 效果的网页 也可以开发 app 为了简化 JavaScript 的使用 在其基础上 发展出两个门派 真
  • C++ 用两个栈实现一个队列

    首先我们要看看栈和队列的特点 栈的特点 先进后出 队列的特点 先进先出 队列的出队顺序与栈的出栈是相反的 我们把数据压入第一个栈 如果再把这个栈里面的元素依次压入第二个栈 此时栈2里面的元素的顺序 相当于对一组数据进行了两次倒序 此时对第二