码迷,mamicode.com
首页 > 其他好文 > 详细

用两个栈实现队列

时间:2015-09-28 11:43:10      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

用两个栈实现队列
  • 参与人数:3047时间限制:1秒空间限制:32768K
  • 通过比例:34.71%
  • 最佳记录:0 ms|0K(来自  青哥

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。


  思路1(最普通的方法):
  1、入队时,直接压入到stack1中;
  2、出队时,先将stack1中的所有size-1个元素压入stack2中,然后将stack1的元素弹出;最后将stack2中的元素重新压入到s1中。

  如下图所示:

技术分享

技术分享
 1 class Solution
 2 {
 3 public:
 4     void push(int node) {
 5         stack1.push(node);
 6     }
 7 
 8     int pop() {
 9         int t;
10         while (stack1.size() > 1){
11             t = stack1.top();
12             stack2.push(t);
13             stack1.pop();
14         }
15         int rt = stack1.top();
16         stack1.pop();
17         while(stack2.size() > 0){
18             t = stack2.top();
19             stack1.push(t);
20             stack2.pop();
21         }
22         return rt;
23     }
24 
25 private:
26     stack<int> stack1;
27     stack<int> stack2;
28 };
View Code

 

 

  思路2(优化):

  1、入队时,直接压入到stack1中;
  2、出队时,若stack2不为空,则直接弹出;若stack2为空,则将stack1的size-1个元素压入stack2中,最后弹出stack1中的栈顶元素。

技术分享
 1 class Solution
 2 {
 3 public:
 4     void push(int node) {
 5         stack1.push(node);
 6     }
 7 
 8     int pop() {
 9         int rt;
10         if (!stack2.empty()){
11             rt = stack2.top();
12             stack2.pop();
13         }
14         else{
15             while (stack1.size() > 1){
16                 rt = stack1.top();
17                 stack2.push(rt);
18                 stack1.pop();
19             }
20             rt = stack1.top();
21             stack1.pop();
22         }
23         return rt;
24     }
25 private:
26     stack<int> stack1;
27     stack<int> stack2;
28 };
View Code

 

 

 

 

用两个栈实现队列

标签:

原文地址:http://www.cnblogs.com/qianmacao/p/4843495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!