C++中两个栈实现一个队列
引言
首先看这个标题的时候,需要联想到栈和队列的特点,栈是先进后出,队列是先进先出。假如三个元素1,2,3,将这三个元素依次入栈1后,再将栈1中元素依次出栈放入到栈2中,栈1中只留下最后一个元素1,此时栈2中由两个元素,接下来获取栈1中的栈顶元素,就类似于获取队列中的队顶元素,而此时从栈1中调用出栈,就类似于队列中的出队,将栈2中的元素入栈栈1,获取栈1中的栈顶元素,就类似于获取队列的队尾元素。以上是实现的思维过程。
示例
下面将具体的实现代码附上。
#include <iostream>
#include <stdio.h>
#include <stack>
using namespace std;//两个栈实现一个队列
/***************************************
实现思想:将元素存入栈1中;将栈1中的元素除第一个元素外其它元素出栈将栈1中的元素出栈后入栈栈2将栈1中栈底元素,直接出栈(模拟队列的队头删除元素)返回栈1中栈底元素(模拟队列获取对头元素)返回栈1的栈顶元素(模拟获取队列队尾的元素)===============================================功能:队列的出队,入队,获取对头元素,队尾元素;
****************************************/
class queueCustom
{public:void push(int num)//入队{m_stack1.push(num);}int back()//队尾{return m_stack1.top();}int front()//队头{while (m_stack1.size() > 1){m_stack2.push(m_stack1.top());m_stack1.pop();}int frontElement = m_stack1.top();while (m_stack2.size() != 0){m_stack1.push(m_stack2.top());m_stack2.pop();}return frontElement;}void pop()//出队{while (m_stack1.size() > 1){m_stack2.push(m_stack1.top());m_stack1.pop();}m_stack1.pop();while (m_stack2.size() != 0){m_stack1.push(m_stack2.top());m_stack2.pop();} }
protected:
private:stack<int> m_stack1;stack<int> m_stack2;
};int _tmain(int argc, _TCHAR* argv[])
{queueCustom myQueue;myQueue.push(1);//入队myQueue.push(2);myQueue.push(3);cout<<"队头:"<<myQueue.front()<<endl;//获取队头元素cout<<"队尾:"<<myQueue.back()<<endl;//获取队尾元素cout<<"出队===="<<endl;myQueue.pop();//出队cout<<"队头:"<<myQueue.front()<<endl;cout<<"出队====="<<endl;myQueue.pop();cout<<"队头:"<<myQueue.front()<<endl;system("pause");return 0;
}
运行效果
以上程序运行的效果:
以上是用两个栈实现一个队列,重在实现思路的理解。
参考:https://blog.csdn.net/weixin_44781107/article/details/102506752
C++中两个栈实现一个队列相关推荐
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- python 用两个栈实现一个队列
| 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- python ——两个队列实现一个栈两个栈实现一个队列
1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...
- 两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
- 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...
最新文章
- 【AAAI2022】多任务推荐中的跨任务知识提炼
- Nmap源码分析(脚本引擎)
- java io源码解读_Java IO源码分析(五)——CharArrayReader 和 CharArrayWriter
- Spark累加器(Accumulator)陷阱及解决办法
- python是不是特别垃圾-Python 这语言真是混乱和原始
- ROS(12):双足机器人开发调研
- ALIN10129-自查方案
- 正月初四 | 2月15日 星期一 | 特斯拉否认推出16万元更便宜车型;中国首位百亿票房导演诞生;冷光烟花纳入烟花爆竹管理...
- KBMMW 4.81.00 发布
- 苹果cms V8 蓝色手机模板
- 天猫运动户外狂欢日来了!700多个大牌要如何回馈消费者
- Android中类似Linux下ldd分析可执行文件和动态库对库的依赖
- Visio高级使用技巧
- 部分PTA自测题答案(仅参考)
- eclipse安装翻译插件(通用)
- 倍频电路 倍频芯片 锁相环PLL
- C#反编译工具:.NET Reflector导出代码
- 49个excel常用技巧(五)
- 服务类采购订单 Service PO
- 微博模拟登陆之验证码的解决方法