两个栈来实现一个队列的C++代码

转载:http://blog.csdn.net/stpeace/article/details/46765343


利用两个栈来实现一个队列, 这个问题很常见。  最关键的是要有好的思路, 至于实现, 那是很简单的事情了。 在本文中, 也想说说自己的思路, 但是, 我觉得用代码来表述思路更符合我的习惯, 也是我的菜, 所以, 仅仅给出代码。 如有需要, 大家可以根据代码来理解思路。

       OK, 没有必要废话了, 直接上代码:

[cpp] view plaincopy
  1. #include <iostream>  
  2. #include <stack>  
  3. using namespace std;  
  4.   
  5.   
  6. // 用两个stack实现一个queue, 以int类型为例吧  
  7. class MyQueque  
  8. {  
  9. private:  
  10.     stack<int> s1; // s1负责入队  
  11.     stack<int> s2; // s2负责出队  
  12.       
  13. public:  
  14.     // 入队  
  15.     void push(int x)  
  16.     {  
  17.         s1.push(x);  
  18.     }  
  19.   
  20.     // 出队  
  21.     void pop()  
  22.     {  
  23.         if(!s2.empty())  
  24.         {  
  25.             s2.pop();  
  26.         }  
  27.         else  
  28.         {  
  29.             while(!s1.empty())  
  30.             {  
  31.                 int tmp = s1.top();  
  32.                 s1.pop();  
  33.                 s2.push(tmp);  
  34.             }  
  35.   
  36.             s2.pop();  
  37.         }  
  38.     }  
  39.   
  40.     // 取头  
  41.     int front()  
  42.     {  
  43.         if(!s2.empty())  
  44.         {  
  45.             return s2.top();  
  46.         }  
  47.   
  48.         while(!s1.empty())  
  49.         {  
  50.             int tmp = s1.top();  
  51.             s1.pop();  
  52.             s2.push(tmp);  
  53.         }  
  54.   
  55.         return s2.top();  
  56.     }  
  57.   
  58.     // 取尾  
  59.     int back()  
  60.     {  
  61.         if(!s1.empty())  
  62.         {  
  63.             return s1.top();  
  64.         }  
  65.   
  66.         while(!s2.empty())  
  67.         {  
  68.             int tmp = s2.top();  
  69.             s2.pop();  
  70.             s1.push(tmp);  
  71.         }  
  72.   
  73.         return s1.top();  
  74.     }  
  75.   
  76.     // 求大小  
  77.     int size()  
  78.     {  
  79.         return s1.size() + s2.size();  
  80.     }  
  81.   
  82.     // 判断是否为空  
  83.     bool empty()  
  84.     {  
  85.         if(s1.empty() && s2.empty())  
  86.         {  
  87.             return true;  
  88.         }  
  89.   
  90.         return false;  
  91.     }  
  92. };  
  93.   
  94.   
  95. int main()  
  96. {  
  97.     {  
  98.         MyQueque que;  
  99.         que.push(1);  
  100.         que.push(2);  
  101.         que.push(3);  
  102.         que.push(4);  
  103.         que.push(5);  
  104.   
  105.         while(!que.empty())  
  106.         {  
  107.             cout << que.front() << endl;  
  108.             que.pop();  
  109.         }  
  110.   
  111.         cout << "-------------------" << endl;  
  112.     }  
  113.   
  114.   
  115.     {  
  116.         MyQueque que;  
  117.         que.push(1);  
  118.         que.push(2);  
  119.         que.push(3);  
  120.         que.push(4);  
  121.         que.push(5);  
  122.   
  123.         while(!que.empty())  
  124.         {  
  125.             cout << que.size() << endl;  
  126.             que.pop();  
  127.         }  
  128.   
  129.         cout << "-------------------" << endl;  
  130.     }  
  131.   
  132.   
  133.     {  
  134.         MyQueque que;  
  135.         que.push(1);  
  136.         que.push(2);  
  137.         que.push(3);  
  138.         que.pop();  
  139.         que.pop();  
  140.         que.push(4);  
  141.         que.push(5);  
  142.   
  143.         while(!que.empty())  
  144.         {  
  145.             cout << que.front() << endl;  
  146.             que.pop();  
  147.         }  
  148.   
  149.         cout << "-------------------" << endl;  
  150.     }  
  151.   
  152.     return 0;  
  153. }  
       结果:

1
2
3
4
5
-------------------
5
4
3
2
1
-------------------
3
4
5
-------------------

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

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

相关文章

解读设计模式----单例模式(Singleton Pattern)

单例模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点.在程序设计中,有很多情况需要确保一个类只能有一个实例.从这句话可以看出,Singleton模式的核心&#xff1a;如何控制用户使用new对一个类的实例构造器的任意调用。如何绕过常规的构造器&#xff0c;提供一…

网站开发的小知识参考(慢慢收集备用)

inetinfo.exe占用80端口的解决方法 我在本机配置PHP环境时&#xff0c;安装的时候遇到80端口被占用&#xff0c;经过查询才知道&#xff0c;原来是Inetinfo.exe占用了80端口&#xff0c;于是把Inetinfo.exe服务关掉就可以正常安装PHP环境了。解决方法在windows服务管理里&#…

Linux下如何搭建Java环境

软件环境 虚拟机&#xff1a;VMware Workstation系统&#xff1a;Linux&#xff1a;CentOS-7-x86_64工具&#xff1a; 安装工具&#xff1a;SSH客户端搭建步骤 1&#xff1a;查询当前系统版本 cat /proc/version2&#xff1a;首先确认当前系统是否已经存在java环境 java -vers…

程序中提升几毫秒、节省几 kB 的内存有必要吗?

我记得我上小学的时候有一篇课文&#xff0c;说是有一个人很节省&#xff0c;不仅他自己家里节省&#xff0c;如果别人家吃饭乱扔的剩饭&#xff0c;他都会去收拾起来晒干存起来。然后刚好有一年饥荒&#xff0c;大家都没有米吃了&#xff0c;他就把他那些年存起来的米给大家吃…

pthread_join()函数理解

pthread_t tid; 使用方式&#xff1a;pthread_join(tid,NULL); 为什么要使用pthread_join()&#xff1f; 在很多情况下&#xff0c;主线程生成并起动了子线程&#xff0c;如果子线程里要进行大量的耗时的运算&#xff0c;主线程往往将于子线程之前结束&#xff0c; 但是如果主…

SmartTemplate学习入门一

php最简单的模板 Array的变量是由SmartTemplate内建函数assign&#xff08;&#xff09;来赋值的 具体语法如下 assign ( 模版中的变量, 要替换的内容 ) 或 assign ( Array内容 ) 和其他程序的变量一样&#xff0c;smartTemplate的变量是由特殊的{}所包含的。里面的内容可以是S…

人生感言

马云说的一些话&#xff0c;还是值得思考的&#xff1a; (1)、细节好的人格局一般比较差 (2)、态度比能力重要&#xff0c;选择同样也比能力重要 (3)、领导比员工多什么&#xff1f; 领导永远不要跟下属比技能&#xff0c;下属肯定比你强&#xff1b;如果不比你强&#x…

当MCU死机了,先把硬件抓过来~

关于软件开发中的偶发性问题&#xff0c;有些处理办法看似不是很难&#xff0c;但其实最重要的还是对问题的敏感度&#xff0c;而这份敏感度就来源于你对整个系统的理解和把握。当你能够尽快缩小问题代码的范围&#xff0c;在一定程度上就已经加快了解决问题的进度。之前我曾提…

青蛙学Linux—NFS

NFS&#xff0c;Network File Syttem&#xff0c;网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上&#xff0c;以实现数据共享。NFS的配置非常简单&#xff0c;经过简单的设置既能快速使用NFS。 使用NFS&#xff0c;首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具&#xff1a;Komodo Edit 但是安装了好多次都没有出现提示&#xff0c;均告失败&#xff01;今天再次鼓起勇气安装试试&#xff1a;首先安装Komodo-Edit-4.3.2-1263; 成功&#xff01;然后&#xff1a; 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…

火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/51040218#cpp 看看如下代码的一个非常隐晦的错误&#xff0c; 虽然不会每次core dump, 但类似代码迟早会core dump&#xff0c; 好多人遇到过。 此问题极难定位&#xff0c; 看一下吧&#xff1a; [cpp] view pl…

P1648 看守

传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例&#xff0c;那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\)&#xff0c;而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\(…

好友让我看这段代码

周末的时候&#xff0c;一个微信好友让我旁边看一段代码在写下面的文章之前&#xff0c;我先简单说下写代码是一件非常有意思的事情&#xff0c;同时也是一件需要我们认真对待的事情&#xff0c;我不认为一定要把代码写的和大神一样看不明白&#xff0c;但是至少要逻辑清晰&…

使用github管理Eclipse分布式项目开发

使用github管理Eclipse分布式项目开发 老关我在前面的博文&#xff08;github管理iOS分布式项目开发&#xff09;中介绍了github管理iOS分布式开发&#xff0c;今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目&#…

愉快且卓有成效:培养你与人相处的能力

毫无疑问&#xff0c;渊博的学识和不断的创新是事业成功的基础。然而&#xff0c;把一个概念变为成果&#xff0c;离开他人的合作&#xff0c;任何人&#xff0c;无论是伟人还是凡夫&#xff0c;都无法实现。与人合作得是否愉快且卓有成效&#xff0c;完全取决于你与人相处的能…

小玩一个并行多线程MCU—MC3172

大家好转发一篇杂烩君的文章&#xff0c;杂烩君是我同一个高中的老乡&#xff0c;他平时分享的嵌入式知识非常不错。——————大家好&#xff0c;我是杂烩君。最近&#xff0c;朋友送了块小板子&#xff0c;板子上的MCU是个很有意思的东西——并行多线程处理器MC3172 。通俗…

Android 人脸识别签到(一)

因为Android课程设计自己选题&#xff0c;所以作者选了这个相对简单的。本来开始是想做大学课程查签到&#xff0c;拍一张集体照&#xff0c;就可识别哪些人已到&#xff0c;哪些未到。查了一下百度AI开发平台的人脸识别接口&#xff0c;发现V3的接口文档有M:N的人脸识别&#…

[系列文章]上传文件管理控件v2

一、引言&#xff1a; 开发v1的时候&#xff0c;遇到很多困难&#xff08;因为我是新手&#xff09;&#xff0c;于是就上网找了一些资料。 其中&#xff0c;这篇《数据绑定的总结 》文章&#xff08;http://www.cnblogs.com/qingtianyzl/articles/351012.html&#xff09;被我…

[ mongoDB ] - mongoDB的基本操作

mongoDB的基本操作 强烈推荐参考官方用户手册&#xff1a; http://www.mongodb.org/display/DOCS 1)插入&#xff08;insert&#xff09; 插入的value是json对象&#xff0c;以下示例循环添加了10个用户信息&#xff0c;字段可以是字符串、数值、对象、数组等。 通过VUE查看&am…

STL中的multimap---顺便说说如何查找同一关键字对应的所有值

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/44984639 我个人感觉哈&#xff0c; map的应用场景比multimap更多&#xff0c; 不过&#xff0c; 我们还是来学一下multimap。 我们知道&#xff0c; multimap中&#xff0c; 一个关键字可能对应多个不同的值&am…