数据结构-使用两个栈实现一个队列

1:如何只使用stack实现queue呢?我们知道stack是先进后出的(FIFO),而queue是先进先出的(FIFO)。也就是说,stack进行了一次反向。如果进行两次反向,就能实现queue的功能,所以我们需要两个stack实现queue。

    下面是具体思路。

假设有两个栈A和B,且都为空。可以认为栈A为提供入队列的功能,栈B提供出队列的功能。

(1)如果栈B不为空,直接弹出栈B的数据。

(2)如果栈B为空,则依次弹出栈A的数据,放入到栈B中,再弹出栈B的数据。

代码如下:

#include "stdafx.h"
#include<malloc.h>
#include <iostream>
#include <assert.h>
using namespace std;/*单链表的节点,data表示节点的数据域,next指向下一个节点*/
class MyData
{
public:MyData() :data(0), next(NULL) {};//默认构造函数,这样表示后,主体中不用再写这个函数了MyData(int value) :data(value), next(NULL) {};//带参数的构造函数int data;//数据域MyData *next;//下一个节点
};/*表示栈的定义,其中public成员top表示栈顶,由于不能直接操作栈底,因此这里没有定义栈底的指针。
在默认构造函数中,把栈顶指针top置空,表示此时栈为空栈。*/
class MyStack
{
public:MyStack() :top(NULL) {};//默认构造函数void push(MyData data);//进栈void pop(MyData *pData);//出栈bool IsEmpty();//是否为空栈MyData *top;//栈顶
};class MyQueue
{
public:void enqueue(MyData data);//入队void dequeue(MyData &data);//出队bool IsEmpty();//是否为空队
private:MyStack s1;//用于入队MyStack s2;//用于出队
};//进栈
void MyStack::push(MyData data)
{MyData *pData = NULL;pData = new MyData(data.data);//生成新节点pData->next = top;top = pData;
}//判断栈是否为空
bool MyStack::IsEmpty()
{return(top == NULL);//如果top为空,则返回1,否则返回0
}//出栈
void MyStack::pop(MyData *data)//将删除的节点保存到data中
{if (IsEmpty())//如果栈为空,直接返回
    {return;}data->data = top->data;//给传出的参数赋值MyData *p = top;//临时保存原栈顶节点top = top->next;//移动栈顶,指向下一个节点delete p;//释放原栈顶节点内存
}//入队
void MyQueue::enqueue(MyData data)
{s1.push(data);//只对s1进行操作
}//出队
void MyQueue::dequeue(MyData &data)
{MyData temp(0);//局部变量,用于临时存储if (s2.IsEmpty()){while (!s1.IsEmpty())//如果s2为空,把s1的所有元素push到s2中
        {s1.pop(&temp);//弹出s1的元素s2.push(temp);//压入s2中
        }}if (!s2.IsEmpty()){s2.pop(&data);//此时s2不为空,则弹出s2的栈顶元素
    }
}//队列判空
bool MyQueue::IsEmpty()
{//如果两个栈都为空,则返回1,否则返回0return(s1.IsEmpty() && s2.IsEmpty());
}
int main()
{MyData data(0);//定义一个节点
    MyQueue q;q.enqueue(MyData(1));q.enqueue(MyData(2));q.enqueue(MyData(3));q.dequeue(data);cout << "dequeue" << data.data << endl;q.dequeue(data);cout << "dequeue" << data.data << endl;q.dequeue(data);cout << "dequeue" << data.data << endl;cout << "IsEmpty:" << q.IsEmpty() << endl;return 0;
}
View Code

运行结果:

转载于:https://www.cnblogs.com/lovemi93/p/7607203.html

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

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

相关文章

5G时代下,边缘计算产品的未来展望

来源&#xff1a;北京物联网智能技术应用协会首发于人人都是产品经理。一、边缘计算市场潜力1. 5G基建如火如荼&#xff0c;万物互联互融将成为新战场2019年6月6号上午工信部宣布正式为中国移动、中国联通、中国电信、中国广电四家企业颁发5G牌照&#xff0c;中国正式进入5G元年…

使用Xcode进行iOS设备无线调试

设备环境&#xff1a;Mac OSX 10.12.5、iOS11、Xcode9PS:这是WWDC2017的新功能&#xff0c;iOS11以上&#xff0c;Xcode9这是刚性要求。这个功能不好找&#xff0c;就记下来了 手机连接上Xcode&#xff0c;打开Xcode菜单&#xff1a;Windows->Device and Simulators。找到连…

java 请求url 返回数据_java后台发起get请求获取响应数据|chu

本文实例为大家分享了java后台发起get请求获取响应数据&#xff0c;供大家参考&#xff0c;具体内容如下学习记录&#xff1a;话不多说直接上代码&#xff1a;package com.jl.chromeTest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.H…

Android Studio 设置字体

File->Settings->Editor->Colors & Fonts->Font->Editor Font 转载于:https://www.cnblogs.com/WJQ2017/p/7608370.html

这三个博弈论新趋势,正深刻影响深度强化学习

来源 | AI科技评论作者 | Jesus Rodriguez编译 | 亚尔曼•佩皮校对 | 丛末 & Camel博弈论在现代人工智能&#xff08;AI&#xff09;解决方案中正扮演着至关重要的角色&#xff0c;深度强化学习&#xff08;DRL&#xff09;正是积极拥抱博弈论的头等公民。从单智能体程序到…

美国再出半导体新法案!1800亿谋求芯片制造振兴

文章来源&#xff1a;EE Times、James E.Risch芯东西&#xff08;ID&#xff1a;aichip001&#xff09;编 | 董温淑芯东西7月1日消息&#xff0c;上周&#xff0c;多位美国两党议员共同提出《2020美国晶圆代工法案&#xff08;AFA&#xff0c;The American Foundries Act Of 20…

stackexchange.mysql_.net core使用redis基于StackExchange.Redis

.net core使用redis基于StackExchange.Redis教程&#xff0c;具体如下一.添加引用包StackExchange.RedisMicrosoft.Extensions.Configuration二.修改配置文件 appsettings.json{"RedisConfig": {"Redis_Default": {"Connection": "127.0.0.…

Apache网站服务

Apache 下载地址&#xff1a; http://mirror.bit.edu.cn/apache/httpd/相关软件下载地址&#xff1a;http://mirror.bjtu.edu.cn/apache/apr/apr          http://mirror.bjtu.edu.cn/apache/apr/apr-utilApache 简介&#xff1a; 进程技术&#xff0c;高资源消耗&…

微积分的发展史

来源&#xff1a;数学中国早期萌芽时期&#xff1a;1、 古西方萌芽时期&#xff1a;公元前七世纪&#xff0c;泰勒斯对图形的面积、体积与的长度的研究就含有早期微积分的思想&#xff0c;尽管不是很明显。公元前三世纪&#xff0c;伟大的全能科学家阿基米德利用穷竭法推算出了…

c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...

[c#]代码库代码中使用事务前提&#xff1a;务必保证一个功能(或用例)在同一个打开的数据连接上&#xff0c;放到同一个事务里面操作。首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行&#xff0c;并事务执行打开同一个连接、事务完成关闭同一个连接的一个…

AI的“色差”与“纠偏”

来源&#xff1a;脑极体在美国学术界声援BLM&#xff08;Black Lives Matter&#xff09;之后&#xff0c;事情的走向有点难以预料。学术界的反种族歧视反省似乎没有了下文&#xff0c;但是如火如荼的BLM运动早已蔓延开来&#xff0c;这次将矛头指向了AI界。事情的起因是杜克大…

英伟达奔驰共同发布自动驾驶系统,还自带停车功能

大数据文摘出品来源&#xff1a;VB编译&#xff1a;白浩然最近&#xff0c;英伟达&#xff08;Nvidia&#xff09;宣布为了和奔驰&#xff08;Mercedes-Benz&#xff09;汽车紧密合作&#xff0c;计划从2024年开始推出一款车载计算系统和AI基础设施&#xff0c;该技术于去年1月…

Gartner发布2020年数据与分析领域的十大技术趋势

来源&#xff1a;Gartner公司近日&#xff0c;Gartner发布了数据与分析领域的十大技术趋势&#xff0c;为数据和分析领导者的新冠疫情&#xff08;COVID-19&#xff09;响应和恢复工作提供指导&#xff0c;并为疫情后的重启做好准备。数据和分析领导者如果希望在疫情后能持续创…

java2019 数据结构算法面试题_2019年JVM最新面试题,必须收藏它

1、JVN内存结构方法区和对是所有线程共享的内存区域&#xff1b;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域的唯一…

前沿科技 | 中科院科学家研究揭示灵活行动选择的神经机制

来源&#xff1a;中国科学院6月24日&#xff0c;中国科学院科学家团队——脑科学与智能技术卓越创新中心&#xff08;神经科学研究所&#xff09;、上海脑科学与类脑研究中心、神经科学国家重点实验室姚海珊研究组在eLife上在线发表了题为《次级运动皮层在灵活视觉分类行为中参…

中科院调查组成立!杨辉发表声明,并对举报信作出详细回应

左&#xff1a;加州大学圣地亚哥分校教授付向东。右&#xff1a;中科院神经所青年 PI 杨辉。图片来源&#xff1a;UCSD/一席演讲来源 BioArtReports 中科院神经所 等整理 科研圈7 月 2 日&#xff0c;网络消息称加州大学圣地亚哥分校细胞和分子医学系教授付向东发布实名举报信&…

java lookandfeel nimbus_动态改变LookAndFeel

LookAndFeel可以改变图形界面的风格&#xff0c;比如说可以将Java的默认界面改变成仿Windows&#xff0c;UNIX等其它风格的界面&#xff0c;主要有以下几种界面风格&#xff1a;metal(默认):"javax.swing.plaf.metal.MetalLookAndFeel"windows:"com.sun.java.sw…

盘点华为系工控企业——中国A股上市公司最多的创业体系

来源&#xff1a;OFweek工控别看今日华为风光无限&#xff0c;美国举国打压下更显华为雄厚实力&#xff1b;但早在2000年左右&#xff0c;全球IT产业泡沫破灭&#xff0c;作为通信设备商&#xff0c;华为也受累进入寒冬&#xff0c;任正非为了鼓励团队士气&#xff0c;写出了著…

秦川团队《科学》刊发研究:新冠感染恒河猴康复后不会再感染

来源&#xff1a;澎湃新闻新冠病毒&#xff08;SARS-CoV-2&#xff09;肺炎疫情全球大流行的背景下&#xff0c;恢复期患者是否有再次感染的风险目前尚不清楚。来自中国的最新科研成果表明&#xff0c;原发性新冠病毒感染可防止随后再感染&#xff0c;这对新冠患者的预后和下一…

昨夜,5G R16标准正式冻结!5G物联网扬帆起航

作者&#xff1a;赵小飞物联网智库 整理发布转载请注明来源和出处导 读昨天夜里&#xff0c;负责5G标准的国际组织3GPP TSG&#xff03;88全体会议宣布5G R16标准冻结。在新冠疫情全球肆虐的背景下&#xff0c;标准化推进工作遇到非常大的挑战&#xff0c;而3GPP的专家们依然能…