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

两个栈实现一个队列

时间:2015-11-11 06:38:08      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:两个栈实现一个队列

用两个栈实现一个队列

算法思想:

(1)stack1用来存储入队的元素,所以入队就是把进来的元素push到stack1;

(2)对于出队列,一开始stack2是空的,所以我们把stack1中的元素全部pop到stack2中,这样stack2的栈顶就是队头,只要stack2不为空,那么每次出队,就相当于stack2的pop;

(3)接下来,每入队一个元素,需要判断stack1是否为空,如果为空,需将stack2的元素pop到stack1,再将入队元素push到stack1。每出队一个元素,如果stack2不为空,就从stack2中pop一个元素,如果stack2不为空,需要重复上面的操作—把stack1中的元素pop到stack2中。

#include<iostream>

#include <stack>

using namespace std;

template<class T>

class Queue

{

public:

void push(const T& x)

{

if (s1.empty())

{

while (!s2.empty())

{

s1.push(s2.top());

s2.pop();

}

}

s1.push(x);

cout << x << endl;

}

void pop()

{

if (s2.empty())

{

while (!s1.empty())

{

s2.push(s1.top());

s1.pop();

}

}

cout << s2.top() << endl;

s2.pop();

}

const T& front()

{

if (s2.empty())

return s2.top();

while (!s1.empty())

{

s2.push(s1.top);

s1.pop();

}

return s2.top();

}

bool isEmpty()

{

return s1.isEmpty() && s2.isEmpty();

}

private:

stack<T> s1;

stack<T> s2;

};

void test()

{

Queue<int> q;

q.push(1);

q.push(2);

q.push(3);

q.push(4);


q.pop();

q.push(5);

q.pop();

}

int main()

{

test();

return 0;


}



本文出自 “aiqinhai” 博客,请务必保留此出处http://07282.blog.51cto.com/10617067/1711597

两个栈实现一个队列

标签:两个栈实现一个队列

原文地址:http://07282.blog.51cto.com/10617067/1711597

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