您的位置:首页 > 其它

两个栈实现队列的功能

2010-09-25 21:05 381 查看
思路参考:http://hi.baidu.com/liangjw821/blog/item/74c98ed520f299cc51da4b86.html

对于这个题目,还可以考虑用两个队列实现栈的功能,其实对于这种类型的题目,我们应该要做到举一反三,最近因为要开始准备参加10月份的笔试,所以一直在看数据结构,争取能够做得好一些(扯远了)。

相信大家都知道栈和队列的特性,栈中的元素是后进先出的,队列中的元素是先进先出的。由他们的特性我们思考一下就很快可以想到怎么来实现,

对于入队操作,我们可以对一个栈(stack1)进行进栈操作。

对于出队操作,我们可以将stack1中的元素进行出栈操作,并且将每个出栈的元素压入进stack2中,则此时栈中的元素就与stack1中的顺序刚好相反。举个例子:

stack1 进栈元素: a, b, c, d; 出栈顺序:d, c, b, a,出栈顺序也是stack2中的元素由下向上的顺序,可以画个图实现一下。图画的不好O(∩_∩)O~。

stack1 代码

1 #include <iostream>
2 #include <stack>
3 using namespace std;
4
5 template <typename T>
6 class Queue {
7 public:
8 Queue() {}
9 ~Queue() {}
10
11 void AppendTail( const T& node);
12 T DeleteHead();
13 private:
14 stack<T> m_stack1;
15 stack<T> m_stack2;
16 };
17
18 template <typename T>
19 void Queue<T>::AppendTail( const T& node ) {
20 m_stack1.push( node );
21 }
22
23 template <typename T>
24 T Queue<T>::DeleteHead() {
25 if( m_stack2.empty() ) { //B栈为空
26
27 while ( m_stack1.empty() != true ) {
28 T t = m_stack1.top(); //A栈出栈操作,同时B栈入栈操作
29
30 m_stack1.pop();
31 m_stack2.push( t );
32 }
33 }
34 T t = m_stack2.top(); //B栈不空
35 m_stack2.pop(); //B栈直接出栈操作
36 return t;
37 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: