实现思路:

使用栈1来进行入队操作(Push()),栈2用在执行出队操作(Pop())。
每次进行获取队尾元素(Back())时,如果栈1为空,需要将栈2中所有元素弹出放入栈1中。
每次进行获取队首元素(Front())或是弹出队首元素(Pop())时,如果栈2为空,需要将栈1中所有元素弹出然后放入栈2中。
因为数据可能同时存在两个栈中,所以,获取队列中元素数量(Size())和判断队列是否为空(Empty())时两个栈均需进行操作。

实现的栈类型为NewQueue,包括的成员函数如下:

bool Empty()
两个栈都需要为空才为空
std::size_t Size()
加上两个栈中的元素个数
int Front()
如果栈1为空,需要将栈2中元素统统压入栈1
int Back()
如果栈2为空,需要将栈1中元素统统压入栈2
void Push(int newData)
void Pop()
如果栈2为空,需要将栈1中元素统统压入栈2

实现代码:

头文件NewQueue.h

class NewQueue
{public:NewQueue() = default;~NewQueue() = default;public:bool Empty();std::size_t Size();int Front();int Back();void Push(int newData);void Pop();private:void CheckTransferToStack1();void CheckTransferToStack2();private:std::stack<int> m_stack1;std::stack<int> m_stack2;
};

实现文件NewQueue.cpp

#include "NewQueue.cpp"bool NewQueue::Empty()
{return m_stack1.empty() && m_stack2.empty();
}std::size_t NewQueue::Size()
{return m_stack1.size() + m_stack2.size();
}int NewQueue::Front()
{CheckTransferToStack2(); return m_stack2.top();
}int NewQueue::Back()
{CheckTransferToStack1();return m_stack1.top();
}void NewQueue::Push(int newData)
{m_stack1.push(newData);
}void NewQueue::Pop()
{CheckTransferToStack2();m_stack2.pop();
}void NewQueue::CheckTransferToStack1()
{if (!m_stack1.empty()) return; while (!m_stack2.empty()) {m_stack1.push(m_stack2.top());m_stack2.pop();}
}void NewQueue::CheckTransferToStack2()
{if (!m_stack2.empty()) return;while (!m_stack1.empty()) {m_stack2.push(m_stack1.top());m_stack1.pop();}
}

07. 用两个栈实现队列(C++版本)相关推荐

  1. 【剑指offer-Java版】07用两个栈实现队列

    两个栈实现一个队列:stack_1 stack_2 入队操作:直接入stack_1 出队操作:如果stack_2不为空,那么从其中弹出一个作为出队元素,否则将stack_1元素全部依次压入stack_ ...

  2. 07. 用两个栈实现队列

    队列为先入先出,栈为先入后出. B实现A的倒序排列 增加元素即在A中栈顶增加 删除元素即将A倒序再删除栈顶元素,即删除B中的栈顶元素 如果A本身为空则无元素,返回-1: 如果A本身有元素,则循环输入到 ...

  3. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  4. 剑指offer_第5题_用两个栈实现队列

    题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...

  5. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  6. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

  7. 【干货】容器适配器实现两个栈模拟队列

    用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...

  8. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  9. 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列

    一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...

  10. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

最新文章

  1. 架构体系需要进一步研究探索的V2路线图
  2. 百度网络推广带你了解网站文章锚文本优化需要注意的事项?
  3. 和平精英清明节服务器维修时间,和平精英体验服关服维护要多久 和平精英体验服什么时候开放...
  4. python让用户输入字符串_当用户输入字符串而不是整数时,如何保护我的python代码?...
  5. 将uglifyjs添加到鼠标右键菜单
  6. vue跳转到外部链接_前端实战项目:Vue.js实现外卖平台webapp,饿了么项目的翻版...
  7. 简单几招优化你的Go程序
  8. Pico Neo3 4VR一体机破解版游戏资源合集安装包下载及安装教程分享
  9. 什么是接口测试,接口测试的目的,如何进行接口测试
  10. Linux的tar解压命令
  11. 解决报错:错误使用 xlsread未找到工作表 ‘sheet1‘
  12. Steam 界面布局出错的问题
  13. 计算机教师所需技能,信息技术教师应具备哪些教学技能
  14. Linux之setenv()/getenv()设置/获取环境变量
  15. 高等数学Mathematica实验题——费马素数猜想(Fn=2^(2^n)+1为素数)的证伪(Verification of Fermat's Prime Number Function)
  16. 服务器运维技术-02 Linux基本使用
  17. 北京杭州差距这么大?程序员在北京准点下班,在杭州12点在还加班
  18. scotland yard
  19. 2022年腾讯云618采购季有什么亮点
  20. 3、S32K14X学习笔记(三):MDK5/Keil5下安装恩智浦-NXP S32K11X和S32K14X系列pack包

热门文章

  1. (原創) 如何控制DE2 VGA輸出時某座標的顏色? (IC Design) (DE2) (Quartus II)
  2. 做底层 AI 框架和做上层 AI 应用,哪个对自己的学术水平(或综合能力)促进更大?...
  3. Lexical environments: ECMAScript implementation
  4. ThreadPoolExecutor运转机制详解
  5. ffmpeg ffplay ffprobe资料整理
  6. React/Router
  7. please verify the preference field with the prompt:Tomcat JDK name
  8. 专访飞康新任CEO:云时代下,我们更懂数据保护
  9. 53.Linux/Unix 系统编程手册(下) -- POSIX 信号量
  10. 3. CSS 派生选择器