剑指offer之两个栈实现队列问题

1 问题

两个栈实现队列的插入和获取头部元素的功能

 

 

 

 

 

 

 

 

2 分析

我们定义连个栈stack1,stack2,当队列弹出头部元素的时候,我们知道队列先进后出,我们先把一个元素压到stack1,然后再压一个元素到stack1,然后我们把stack1的top函数得到栈顶值然后pop弹出来,push到stack2里面去,这个时候后面进的元素就在stack2的栈底,然后我们再把stack1的top函数得到栈顶值然后pop弹出来,push到stack2里面去,这个时候我们stack2的top()栈顶函数也就是我们第一个压到stack1的元素,我们只需要把stack2的top()的值获取就是队列的第一个元素。

简言之

队列获取头部元素的功能:如果stack2里面没有元素,我们需要把stack1里面的元素从栈顶一个一个弹出来压入到stack2,当获取队列的头部值的时候,我们只需要获取stack2的顶部元素值(top方法)就行,然后把这个值pop出来,如果stack2里面有元素,我们直接获取stack2的顶部元素值(top方法)就行,然后把这个值pop出来。

插入队列元素的功能,我们只需要把元素直接push到stack1里面就行,不管stack2里面有没有值。

 

 

 

 

 

 

3 代码实现

#include <iostream>
#include <stack>using namespace std;class student
{
public:student(){}~student(){}student(std::string name, std::string age, std::string sex) {this->name = name;this->age = age;this->sex = sex;}void toString(){std::cout << "name is "<< name << " age is "<< age << " sex is "<< sex << std::endl;}
private:std::string name;std::string age;std::string sex;
};template <typename T> 
class Test
{
public:Test(){}~Test(){}Test(const T& t);//往队列里面添加元素void add(const T& t);//往队列里面删除元素T top();
private:std::stack<T> stack1;std::stack<T> stack2;
};template <typename T> void Test<T>::add(const T& t)
{stack1.push(t);
}template <typename T> T Test<T>::top()
{if (stack2.empty()){//注意这里是while 不是if,我们需要把stack1里面的数据全部弹出来放到stack2里面去while (!stack1.empty()){T& value = stack1.top();stack1.pop();stack2.push(value);}}T top = stack2.top();stack2.pop();return top;}
int main() {student std1("chenyu", "27", "man");student std2("chencaifeng", "27", "woman");student std3("chenzixuan", "3", "woman");student std4("chenzixi", "2", "woman");student std5("chenxuan", "21", "woman");Test<student> queue;queue.add(std1);queue.add(std2);queue.add(std3);queue.add(std4);student top1 = queue.top();top1.toString();student top2 = queue.top();top2.toString(); student top3 = queue.top();top3.toString(); queue.add(std5);student top4 = queue.top();top4.toString(); student top5 = queue.top();top5.toString();  return 0;
}

 

 

 

 

 

 

4 运行结果

name is chenyu age is 27 sex is man
name is chencaifeng age is 27 sex is woman
name is chenzixuan age is 3 sex is woman
name is chenzixi age is 2 sex is woman
name is chenxuan age is 21 sex is woman

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层

用过CASS的人都知道,野外数字测图得到的点数据(平面坐标)可以直接导入到CASS中,进一步绘制地形图。那么,带有坐标的数据能不能在ArcGIS中实现点图层的生成呢?答案是必须的! 本文以气象台站shp数据的生成为例,详细介绍ArcGIS 10.2中导入X、Y坐标(这里指的是经度、纬度)…

【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

本系列博文几乎没有难啃的“专业术语”&#xff0c;尽量让读者能够看明白文章所述内容&#xff0c;是本系列博文的核心宗旨之一。&#xff08;由于本人也是由于项目需要&#xff0c;所以才来查阅相关资料&#xff0c;文中出现的错误欢迎指出&#xff0c;共同进步&#xff01;谢…

一行命令 优化上传速度

本文来自 fir.im 首席吉祥物 TraWor. 最近许多用户反映上传速度慢的一塌糊涂&#xff0c;七牛的上传带宽我想肯定是没问题的&#xff0c;那原因不必多想就剩下 DNS 了。 即便本地网络再快&#xff0c;DNS 服务器给了一个很远的服务器地址也没办法很快的上传。 在终端运行这一行…

go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码

大家好&#xff0c;我是彬哥&#xff0c;本节给大家讲下LollipopGov1.0.20190102版本游戏服务器globla服务器&#xff0c;抛砖引玉了&#xff0c;主要是针对Go语言游戏服务器Global服务器处理。package mainimport ("LollipopGo/LollipopGo/conf""LollipopGo/Lo…

ArcGIS导入Sketchup模型

ArcGIS可以与Sketchup、3D Studio Max等三维软件完美进行交互。 ArcGIS可以借助 Import 3D Files 工具支持主流的三维模型导入。支持 3D Studio Max (*.3ds)、VRML and GeoVRML 2.0 (*.wrl)、SketchUp 6.0 (*.skp)、OpenFlight 15.8 (*.flt)、Collaborative Design Activity (C…

剑指offer之两个队列实现栈的问题

1 问题 两个队列实现栈的插入和获取头部元素的功能 2 分析 1&#xff09;获取头部元素的功能分析&#xff1a; 我们有2个队列&#xff0c;我们知道队列的特点的先进先出&#xff0c;而栈的特点是先进后出&#xff0c;比如我们有数据1,2,3,4,我们分别依次压入队列1&#xff0…

ios wkweb设置图片_iOS WKWebView (NSURLProtocol)拦截js、css,图片资源

项目地址github&#xff1a;HybirdWKWebVIewHybridNSURLProtocol一个基于WKWebView的hybirde的容器。能拦截所有WKWKWebView的的css,js,png等网络请求的demoNSURLProtocol 子类&#xff0c;就可以对 app 内所有的网络请求进行:[NSURLProtocol registerClass:[HybridNSURLProtoc…

solr的空间查询(查询地图周围坐标)

原文网址&#xff1a;http://www.cnblogs.com/hanhuibing/articles/5680616.html 基于Solr的空间搜索 如果需要对带经纬度的数据进行检索&#xff0c;比如查找当前所在位置附近1000米的酒店&#xff0c;一种简单的方法就是&#xff1a;获取数据库中的所有酒店数据&#xff0c;…

「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld

环境说明 操作系统&#xff1a;Windows7 SP1 编辑器说明&#xff1a; Python&#xff1a;notepadC&#xff1a;devcC sharp&#xff08;C#&#xff09;&#xff1a;Visual Studio2019 注意&#xff1a; 标点&#xff1a;在编程中要使用英文的标点符号&#xff0c;必须切记数…

c# 元组类型

简介元组就是将一组松散的对象简单地组合在一起。元组比数组灵活性略强&#xff0c;数组中元素类型是统一的&#xff0c;而元组使用的是泛型参数&#xff0c;每个元素类型相互独立。元组不同于类和结构&#xff0c;类和结构是高度聚合的数据类型&#xff0c;其中要实现各种复杂…

服务器2008 系统日志 提示打印机,介绍服务器日志出现打印机错误的解决方法

今天来聊聊一篇关于服务器日志出现打印机错误的解决方法的文章,现在就为大家来简单介绍下服务器日志出现打印机错误的解决方法,希望对各位小伙伴们有所帮助。windows2003日志提示&#xff0c;打印机 ****未知。登录之前&#xff0c;请与管理员联系&#xff0c;安装驱动程序。事…

js 错误/异常处理

为什么80%的码农都做不了架构师&#xff1f;>>> /*** 自定义错误处理*/ onerror handleError; function handleError(desc,page,line){alert("desc:"desc"\n""page:"page"\n""line:"line); } var s null; s.t…

多面体 (Multipatch)

多面体要素是一种可存储面集合的 GIS 对象,能够在数据库中将 3D 对象的边界表示为单个行。面可存储表示要素组成部分的纹理、颜色、透明度和几何信息。面中存储的几何信息可以是三角形、三角扇、三角条带或环,如下所示。 所有多面体都将…

剑指offer之二叉搜索树的第K个节点

1 问题 给定一颗二叉搜索树&#xff0c;请找出其中的第k小的结点。例如&#xff0c; 5 3 7 2 4 6 8 中&#xff0c;按结点数值大小顺序第三个结点的值为4。 2 分析 二叉树定义&#xff1a;二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff0…

Python turtle库实现基本剖析

有关turtle的相关使用请参考《python图形绘制库turtle中文开发文档及示例大全》 本篇文为turtle库的实现剖析&#xff0c;但不涉及 python 的 TK库。 开始 入口探寻 在turtle中&#xff0c;直走是使用 forward 或者 fd 函数&#xff1b;在本机安装好了 turtle 库后&#xf…

git菜单形式的_Idea:Git的常用菜单操作和常用命令

工作中多人使用版本控制软件协作开发&#xff0c;常见的应用场景归纳如下&#xff1a;假设小组中有两个人&#xff0c;组长小张&#xff0c;组员小袁场景一&#xff1a;小张创建项目并提交到远程Git仓库场景二&#xff1a;小袁从远程Git仓库上获取项目源码场景三&#xff1a;小…

分享我做Dotnet9博客网站时积累的一些资料

从2019年使用WordPress搭建Dotnet9网站&#xff0c;到现在手撸代码开发&#xff0c;介绍中间使用的一些资源&#xff0c;绝无保留&#xff0c;希望对大家有用。1. 申请域名、搭建WordPress网站时间点&#xff1a;2019年11月申请Dotnet9域名&#xff0c;讲个实话&#xff0c;站长…

css媒体查询改变上边距,CSS媒体查询宽度或高度

我在一个全屏页面的中心放置了一个徽标。img.logo {width: 920px;height: 552px;position: absolute;top: 50%;left: 50%;margin-left: -460px;margin-top: -276px;}这很好用。现在我想在不同的设备高度和宽度上使用不同的尺寸&#xff0c;所以我尝试使用媒体查询。media (max-…

基于Azure Blob冷存储的数据压缩备份总结

基于上一篇的压缩算法对比分析报告&#xff0c;选择了LZ4算法的普通模式&#xff0c;其测试压缩率为28%&#xff0c;20G压缩时间为256s&#xff0c;估计1T的冷备时间为3.5h。 接下来&#xff0c;将23T的HBase历史数据进行了压缩冷备&#xff0c;压缩后大小为3.5T&#xff0c;冷…

Ubuntu使用VNC运行基于Docker的桌面系统

2019独角兽企业重金招聘Python工程师标准>>> docker-ubuntu-vnc-desktop From Docker Index docker pull dorowu/ubuntu-desktop-lxde-vnc Build yourself git clone https://github.com/fcwu/docker-ubuntu-vnc-desktop.git docker build --rm -t dorowu/ubuntu-de…