用两个栈实现队列(C++实现)

2023-11-02

用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]

示例 2:
输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

解题思路:

首先将数据输入到stack1中,这时候先进后出,再将stack1中的数据移动到stack2中,相当于将输入的数据的顺序颠倒,这样也就实现了队列的特点,先进先出。下面具体说一下队列为NULL,入队和出队的具体实现方法;
(1)判断队列是否为NULL:stack1 == NULL && stack2 == NULL,则队列为空;
(2)出队:如果stack1为NULL,stack2不为NULL,从stack2中直接出栈,也就是出队列;/如果stack1不为NULL, 将stack1的数据出栈到stack2中,从stack2中直接出栈,也就是出队列;
(3)入队:如果stack2为NULL, 直接入栈stack1,也即入队列;
如果stack2不为NULL, 将stack2出栈到stack1中,数据入栈stack1,也即入队列;

#include <iostream>
#include <stack>
#include <stack>
#include <queue>
using namespace std;

template<typename T>
class MyQueue {
public:
//往s1中直接插入数据
	void push(T t) {
		s1.push(t);
		cout<<  t << " ";
	}
//把队列1中数据往队列2中的数据中导入
	void pop()	{
		if (s2.empty())	{
			while (!s1.empty()) {
				s2.push(s1.top());
				s1.pop();
			}
		}

		if (!s2.empty()) {
			s1.push(s2.top());
			s2.pop();
		}
	}
//输出s2中的数据
	T front()	{
		if (s2.empty()) {
			if (s1.size() == 0)
				cout << "此队列为空" << endl;
			while (!s1.empty()) {
			s2.push(s1.top());
			s1.pop();
			}
		}
		return s2.top();
	}
private:
	stack<T> s1;
	stack<T> s2;
};


int main() {
	MyQueue<int> mq;//
	cout << "inQueue: " << endl;
	mq.push(1);
	mq.push(2);
	mq.push(3);
	mq.push(4);
	mq.push(5);
	mq.push(6);
	mq.push(7);
	cout << endl;
	cout << "queue: " << endl;;
	for (int i = 0; i < 7; i++) {
		cout << mq.front()<<" ";
		mq.pop();
	}
	cout << endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

oj 里面:

class CQueue {
public:
	CQueue() {
	}
	void appendTail(int value) {
		in.push(value);
	}

	int deleteHead() {
		if (out.empty()){
			while (!in.empty()){
				out.push(in.top());
				in.pop();
			}
		}
		if (out.empty()) {
		 return -1;
		} else {
			int del = out.top();
			out.pop();
			return del;
		}
	}
private:
	stack<int> in;
	stack<int> out;

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

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

  • web前端代码大全_Web前端开发代码规范(基础)

    一 引言 对于一个多人团队来说 制定一个统一的规范是必要的 因为个性化的东西无法产生良好的聚合效果 规范化可以提高编码工作效率 使代码保持统一的风格 以便于代码整合和后期维护 二 HTML CSS规范 2 1 浏览器兼容 根据公司业务要求而
  • 阿里云云效新版流水线部署成功

  • 微信公众号连接服务器显示404,WordPress 微信机器人自动回复显示 404 错误解决办法...

    WordPress 微信机器人自动回复显示 404 错误解决办法 2018 10 11 11 12 14 1412 views 最近测试了一下我的微信公众号 多彩阳新 发现由本博客自动返回的链接挂了 关于这个问题我们经过排查 发现在自动回复
  • 演化模型(Evolutionary Model)

    什么是演化模型 演化模型主要针对事先不能完整定义需求的软件开发 用户可以给出待开发系统的核心需求 并且当看到核心需求实现后 能够有效地提出反馈 以支持系统的最终设计和实现 软件开发人员根据用户的需求 首先开发核心系统 当该核心系统投入运行后
  • Leetcode刷题01-- 所有蚂蚁掉下来前的最后一刻

    原题 有一块木板 长度为 n 个 单位 一些蚂蚁在木板上移动 每只蚂蚁都以 每秒一个单位 的速度移动 其中 一部分蚂蚁向 左 移动 其他蚂蚁向 右 移动 当两只向 不同 方向移动的蚂蚁在某个点相遇时 它们会同时改变移动方向并继续移动 假设更
  • Xcode 5 出现 unable to create '/Users/XXX/Library/Developer/Xcode....'无权限问题

    打开终端 输入 sudo chmod R 777 Users XXX Library Developer 搞定
  • 你是如何看待“孔乙己的长衫”?

    学历是一个十分有争议的话题 观点不一 这使得这个话题讨论起来令人热血沸腾 就人生而言 学历是否会成为敲门砖或枷锁 可以说是个纯粹的看法和态度问题 首先 我们要看到学历本身 学历是告诉人们你有哪些学科的专业知识和能力 但是这并不代表你一定能够
  • java连接rocksdb_rocksdb编译步骤——Java、Golang、mac

    如果不是必要不建议自己编译rocksdb 编译的过程比较耗时费力 现在已经有很多编译好的文件可供使用 Java org rocksdb rocksdbjni 5 10 3 Go版本 https github com leeyazhou go
  • 使用vcpkg编译、管理C++类库

    为什么使用vcpkg 1 vcpkg提供了一种类似linux编译 安装第三方类库的方式 不需要手动下载源码 编译源码 2 vcpkg自动管理已经安装的类库 使用集成开发环境如visual studio时直接引用对应的头文件就可以的 不需要配
  • React +TS实现拖拽列表

    使用React TS编写逻辑代码 less编写样式代码 不依赖第三方库 开箱即用 最近写的拖拽组件 分享给大家 直接上代码 首先看看如何使用 自己定义的组件需要包裹在DragList Item组件中 import DragList from
  • 遍历磁盘根目录

    for char i A i lt Z i 遍历所有磁盘 char dir 20 i 组成磁盘名称 char path 100 定义文件路径 UINT type GetDriveType dir 获取磁盘类型 if type DRIVE F
  • 网络与信息安全基础知识--网络安全

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 网络安全概述 二 网络的信息安全 1 信息的存储安全 2 信息的传输安全 三 防火墙技
  • Mac安装Netcat教程

    Netcat可以用于测试通信连接 Mac安装Netcat方式 打开终端输入 brew install netcat 安装好以后测试 输入 nc 可以看到是这样的 itzhuzhu itzhuzhudeMacBook Pro brew ins
  • 五、【服务器】基本概念-1

    服务器标准 ATCA AdvancedTelecom Computing Architecture 国际标准 ATCA脱胎于在电信 航天 工业控制 医疗器械 智能交通 军事装备等领域应用广泛的新一代主流工业计算技术 CompactPCI标准
  • 网络系统实现技术之IPX与SPX

    IPX SPX Novell NetWare网络 Novell公司为适应网络发展 将主机网络转换为PC网络 开发了Novell NetWare网络系统 该系统中基于客户机 服务器模式 以普通PC机做为客户机 以性能强大的服务器做为服务器 为
  • 什么是算法?

    什么是算法 当人们提到 算法 一词 往往就会把它们当成专属于 人工智能 的范畴 很多专业的计算机人士也是 提起算法就头疼 不知道如何学习算法 慢慢的对算法就会失去兴趣 算法不仅仅是计算机行业特有的 在我们的生活中也处处存在着算法 算法是专注
  • 【积跬步以至千里】Windows无法访问指定设备,路径或文件,您可能没有合适的权限访问

    一 问题描述 今天在使用电脑时突然出现如下状况 然后我打开用户权限发现了原来是权限的问题 我点击编辑 依然不管事 那怎么处理呢 二 解决办法 1 方法一 单独设置 1 在无法打开的文件 文件夹上单击鼠标右键 选择 属性 2 切换到 安全 选
  • __int64、ULONGLONG格式化输出

    Tips 打印日志信息的时候出现的问题 虽然很小 也算提个醒 Code 不考虑溢出的情况 ULONGLONG n1 100 printf d n n1 int64 n2 100 printf d n n2 此处是个坑 printf d d
  • 华为推出手机系统云翻新服务:什么是云翻新?如何使用?

    华为手机系统云翻新是华为推出的一项功能 旨在通过云服务提供系统翻新的服务 它可以帮助用户对手机的系统进行优化和更新 以提高手机的性能和流畅度 具体而言 华为手机系统云翻新功能提供了免费的云空间 用户可以将手机中的系统数据备份到云端 并进行系
  • 一位程序员使用M1 Mac的感受

    作为一个window的java开发者 虽然现在window高配置不卡 但是身边的高级开发者都是使用苹果开发 并且给予高度评价 这里也抱着学习的态度去尝试安利一台MAC作为开发 所以去苹果官网看了一下 但是这次苹果出了一个全新的M1芯片 我在

随机推荐

  • STM32网络通信Web Server中SSI和CGI的应用

    介绍 最近由于项目功能需要 开始研究STM32 WebServer通信以及SSI和CGI应用方法 项目结束后 主要总结浏览器与STM32之间进行通行 STM32作为服务器而浏览器做为客户端进行通行 文件介绍 此部分的代码是根据ST官方的We
  • 免费分享一套 SpringBoot + Vue的排课/选课管理系统,挺漂亮的

    大家好 我是锋哥 看到一个不错的SpringBoot Vue 的排课 选课管理系统 分享下哈 项目介绍 近年来 随着网络学校规模的逐渐增大 人工书写数据已经不能够处理如此庞大的数据 为了更好的适应信息时代的高效性 一个利用计算机来实现学生信
  • Python——requests

    requests是python实现的简单易用的HTTP库 使用起来比urllib简洁很多 因为是第三方库 所以使用前需要cmd安装 pip install requests 安装完成后import一下 正常则说明可以开始使用了 基本用法 r
  • c/c++ 计算字符数组/字符串长度

    1 自定义函数求长度 2 使用strlen 函数 3 使用sizeof 操作符 4 使用length 函数 利用自定义函数的方法 int cont str char s int i 0 while str i 0 return i 利用st
  • 已解决【partially initialized module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘】

    已解决 partially initialized module cv2 has no attribute gapi wip gst GStreamerPipeline 在尝试了几乎所有网上能找到的办法之后 本来已经放弃了 但是过了几天抱着
  • VAN:Visual Attention Network

    Visual Attention Network Submitted on 20 Feb 2022 v1 last revised 11 Jul 2022 this version v5 Computer Vision and Patter
  • 微服务zipkin与turbine同时使用遇到的问题

    最近整合zipkin的时候遇到的问题 如果打开turbine监控时 每个turbine刷新周期内都会有rxjava的调用被zipkin捕获到 由于zipkin中的数据是通过Spring cloud sleuth上传的 查阅https clo
  • 数字化转型下数据库面临的12个挑战

    数字化及数字化转型 是近些年来非常火热的话题 本文将从这一角度切入 谈谈数字化场景下对数据库发展趋势带来的影响 1 数据 数字化 数字化转型 数据 是数字化实现的新引擎 数据是企业开展数字化创新和构建企业数字化基因的核心要素 通过对于服务对
  • React--井字棋小游戏

    安装较新版本的node js 这里使用的是v15 0 1 用以记录React学习笔记 1 搭建本地开发环境 在想要创建项目的文件夹下输入cmd 回车 输入命令npx create react app my app等待项目初始化 等待一段时间
  • 【虾说区块链】4个概念解析区块链

    欢迎收听 虾说区块链 现在区块链这个概念在互联网上相当火热 这里简单做一个普及 不涉及项目推广投资 单纯地对区块链相关基础知识概念作一个说明讲解 本人区块链技术爱好者 结合相关区块链资料总结整理了 虾说区块链 也是自己一个学习笔记 涉及相关
  • 深入React源码揭开渲染更新流程的面纱

    转前端一年半了 平时接触最多的框架就是React 在熟悉了其用法之后 避免不了想深入了解其实现原理 网上相关源码分析的文章挺多的 但是总感觉不如自己阅读理解来得深刻 于是话了几个周末去了解了一下常用的流程 也是通过这篇文章将自己的个人理解分
  • java入门篇

    MyEclipse 8 5编辑器 package second public class test public static void main String args 单行注释System out println java practi
  • Java中StringBuilder和StringBuffer用法以及区别

    Java是目前最为流行的编程语言之一 而字符串则是Java程序中不可避免的部分 在字符串的处理中有两个类 StringBuilder和StringBuffer 这两个类都实现了对可变字符串的操作 在一定程度上可以替代String的功能 但它
  • Jenkins 安装提示:Please wait while Jenkins is getting ready to work...

    http mirror xmission com jenkins updates update center json 重启Jenkins 服务即可
  • Apache Druid分析型数据库设计-查询处理

    Apache Druid系列博客 Apache Druid简介 Apache Druid设计 架构 存储设计 查询处理 本文 官方英文原文 Query processing 查询处理 查询分布在Druid集群中 由Broker进行管理 查询
  • 持续集成——jenkins自动化测试环境安装部署

    介绍 Jenkins是一个独立的开源软件项目 是基于Java开发的一种持续集成工具 用于监控持续重复的工作 旨在提供一个开放易用的软件平台 使软件的持续集成变成可能 前身是Hudson是一个可扩展的持续集成引擎 可用于自动化各种任务 如构建
  • 国内有比Damus更强的去中心化社交,王兴的区块城市这次又抄对了?

    近十天来 一款基于去中心化社交协议Nostr 的客户端Damus突然爆火 刷屏了很多人的朋友圈 也激发了国内Web3创业者对社交赛道的关注和讨论 而在这场仍在持续发酵的网络热潮中 原本定位于元宇宙城市的BlockCity 区块城市 不仅被很
  • 我对JavaScript中this的一些理解

    因为日常工作中经常使用到this 而且在JavaScript中this的指向问题也很容易让人混淆一部分知识 这段时间翻阅了一些书籍也查阅了网上一些资料然后结合自己的经验 为了能让自己更好的理解this 进而总结一篇文章 this 是什么 t
  • 科技不断完善刷脸支付变得更安全

    支付宝正式推出刷脸支付功能 在我们腾不出手来或是忘记各种各样的密码可以选择往付款摄像头一站随后输入号码就支付完成 整个过程不足十秒钟 随着科学技术的不断完善 刷脸也会变得更加安全 不过就目前的安全来看 日常使用刷脸支付没有任何问题 刷脸支付
  • 用两个栈实现队列(C++实现)

    用两个栈实现队列 用两个栈实现一个队列 队列的声明如下 请实现它的两个函数 appendTail 和 deleteHead 分别完成在队列尾部插入整数和在队列头部删除整数的功能 若队列中没有元素 deleteHead 操作返回 1 示例 1