剑指offer C ++双栈实现队列

news2024/11/24 19:58:23

1. 基础


队列:先进先出,即插入数据在队尾进行,删除数据在队头进行;

栈:后进先出,即插入与删除数据均在栈顶进行。

2. 思路
两个栈实现一个队列的思想:用pushStack栈作为push数据的栈,用popStack栈作为pop数据的栈。

只要是对队列进行push操作,就将数据push入pushStack栈中。
要实现队列的pop操作,有二点原则,如果popStack为空的话那么我们就将pushStack所有的元素放到popStack中,然后取popStack栈顶元素就是队列的队头;如果popStack不为空的话,我们就直接获取popStack的栈顶元素。
对于top操作来说和pop操作类似,只是最后一步不用pop了。

3. 代码

// ReverseList.cpp : 定义控制台应用程序的入口点。
//

#include <iostream>
#include <Stack>
using namespace std;

class CQueue
{
public:
    CQueue() 
    {

    }

    void appendTail(int value) 
    {
        Sin.push(value);
    }

    int deleteHead() 
    {
        if (Sout.empty()) 
        {
            while (!Sin.empty()) 
            {
                Sout.push(Sin.top());
                Sin.pop();
            }
        }
        if (!Sout.empty()) 
        {
            int res = Sout.top();
            Sout.pop();
            return res;
        }
        else {
            return -1;
        }
    }
    stack<int> Sin, Sout;
};


int main(int argc, char* argv[])
{

    CQueue test;

    test.appendTail(1);
    test.appendTail(2);
    test.appendTail(3);
    test.appendTail(4);
    test.appendTail(5);
    test.appendTail(6);
    test.appendTail(7);
    
    int result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
    result = test.deleteHead();
    std::cout << "result:" << result << std::endl;
	return 0;
}

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

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

相关文章

Linux 多进程开发(下)

第二章 Linux 多进程开发 2.6 进程间通信2.6.1 匿名管道2.6.2 有名管道2.6.3 内存映射2.6.4 信号2.6.5 共享内存 2.7 守护进程 网络编程系列文章&#xff1a; 第1章 Linux系统编程入门&#xff08;上&#xff09; 第1章 Linux系统编程入门&#xff08;下&#xff09; 第2章 L…

word中图片位置问题(后续遇到问题再更新)

问题1&#xff1a;图片插入后显示不全 具体表现为&#xff1a;复制黏贴、或者插入图片后&#xff0c;出现插入的图片显示不全&#xff0c;或者不显示。 例如&#xff1a; 这是因为&#xff1a;图片被设定了固定行距 解决方案&#xff1a;ctrl1 效果&#xff1a; 问题2&am…

南昌云宸网络发展有限公司-小分类客户可自选

南昌云辰网络发展有限公司是华东地区最大的互联网公司。 公司业务涉及互联网营销策划、移动互联网、物联网、广告传媒、微电影、***等&#xff0c;依托以互联网技术为核心的B2B企业贸易平台和O2O电子商务平台&#xff0c;提供为用户提供一站式网络营销策划和解决方案。 &#…

String类(C++)详解与应用

1. 标准库中的string类 1.1 string类 http://www.cplusplus.com/reference/string/string/?kwstringhttp://www.cplusplus.com/reference/string/string/?kwstring1. 字符串是表示字符序列的类2. 标准的字符串类提供了对此类对象的支持&#xff0c;其接口类似于标准字符容器的…

【数据库】Oracle内存结构与参数调优

Oracle内存结构与参数调优 Oracle 内存结构概览oracle参数配置概览重要参数&#xff08;系统运行前配置&#xff09;:次要参数&#xff08;可在系统运行后再优化调整&#xff09;: Oracle数据库服务器参数如何调整OLTP内存分配操作系统核心参数配置Disabling ASMM&#xff08;禁…

力扣--课程表--bfs+dfs

整体思路&#xff1a; 这是一道拓扑序列的题目&#xff0c;我们将边的方向定义成从先修课指向后修课的方向&#xff0c;借一下官方的题解图片&#xff0c;我们需要判断的是形成的这个图结构是否存在环&#xff0c;如果存在环&#xff0c;那么代表不能完成所有课程的学习。 bfs思…

【leetcode】相同的树➕对称二叉树➕另一棵树的子树

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 相同的树二. 对称二叉树三. 另一棵树的子树 一. 相同的树 点击查看题目 思路: bool isSameTree(…

YOLOv9改进 添加新型卷积注意力框架SegNext_Attention

一、SegNext论文 论文地址:2209.08575.pdf (arxiv.org) 二、 SegNext_Attention注意力框架结构 在SegNext_Attention中,注意力机制被引入到编码器和解码器之间的连接中,帮助模型更好地利用全局上下文信息。具体而言,注意力机制通过学习像素级的注意力权重,使得模型可以对…

ChatGPT Prompt 的原理总结

ChatGPT Prompt 的原理总结 ChatGPT Prompt 是 OpenAI 开发的大型语言模型 ChatGPT 的一种使用方式。通过 Prompt&#xff0c;用户可以引导 ChatGPT 生成特定内容&#xff0c;例如回答问题、写故事、写代码等等。 Prompt 的原理 Prompt 本质上是一段文本&#xff0c;它告诉 C…

Opencv 插值方法 总结

一、概括 面试的时候问到了一个图&#xff0c;就是如何将一个算子放缩&#xff1f;&#xff1f;我第一反应是resize&#xff08;&#xff09;,但是后来我转念一想&#xff0c;人家问的是插值方式&#xff0c;今天来总结一下 最邻近插值法原理分析及c实现_最临近插值法-CSDN博…

【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数

作者推荐 视频算法专题 本文涉及知识点 2749. 得到整数零需要执行的最少操作数 给你两个整数&#xff1a;num1 和 num2 。 在一步操作中&#xff0c;你需要从范围 [0, 60] 中选出一个整数 i &#xff0c;并从 num1 减去 2i num2 。 请你计算&#xff0c;要想使 num1 等于 …

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的血细胞智能检测与计数(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发血细胞智能检测与计数系统对于疾病的预防、诊断和治疗具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个血细胞智能检测与计数系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&a…

oracle临时表空间不释放

项目报错 nested exception is java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP 原因是临时表空间满了&#xff0c;临时表空间一直增长&#xff0c;未释放导致临时表空间使用率100%。 查询临时表空间使用率 --临时表空间利用率…

Selenium控制已运行的Edge和Chrome浏览器(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令&#xff08;1&#xff09;Edge&#xff08;2&#xff09;Chrome 2. 执行python代码&#xff08;1&#xff09;先启动浏览器后执行代码&#xff08;2&#xff09;通过代码启动浏览器 3. 爬取效果3. 完整代码共享3.1 包含Excel部分的…

【Python爬虫神器揭秘】手把手教你安装配置Scrapy,高效抓取网络数据

1、 引言 在大数据时代&#xff0c;网络上的信息犹如海洋般浩瀚。想要在这片海洋里挖掘宝藏&#xff0c;一款强大的工具必不可少。今天我们要带大家深入探索的就是Python界鼎鼎大名的爬虫框架——Scrapy。无论你是数据分析师、研究员还是开发者&#xff0c;学会利用Scrapy来自…

力扣L7--- 7.整数反转(java版)--2024年3月12日

1.题目 2.知识点 注1&#xff1a; math.abs() 是一个 Java 中的数学函数&#xff0c;用于返回一个数的绝对值。例如&#xff0c;如果 x 的值是 -10&#xff0c;那么 Math.abs(x) 的值就是 10. 注2&#xff1a;Integer.MIN_VALUE-Math.pow(2,31)-1 Integer.MAX_VALUEMath.po…

VulnHub - Lampiao

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Lampiao 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/lampiao-1,249/ 0x01 信息收集 Nm…

重学SpringBoot3-ErrorMvcAutoConfiguration类

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-ErrorMvcAutoConfiguration类 ErrorMvcAutoConfiguration类的作用工作原理定制 ErrorMvcAutoConfiguration示例代码1. 添加自定义错误页面2.自定义错误控…

sqllab第六关通关笔记

知识点&#xff1a; 报错注入回顾原始语句测试截取函数 mid(字符串&#xff0c;起始位置&#xff0c;长度)substr(字符串&#xff0c;起始位置&#xff0c;长度)left(字符串&#xff0c;长度)right(字符串&#xff0c;长度)加入截取控制的错误注入payload payload:id1"%2…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)

摘要&#xff1a;开发高效的木材表面缺陷检测系统对于提升木材加工行业的质量控制和生产效率至关重要。本篇博客详细介绍了如何运用深度学习技术构建一个木材表面缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统采用了强大的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6…