两个栈实现队列的功能
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 }
对于这个题目,还可以考虑用两个队列实现栈的功能,其实对于这种类型的题目,我们应该要做到举一反三,最近因为要开始准备参加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 }
相关文章推荐
- 两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能?要求给出算法和思路!
- 两个栈实现队列的功能
- 用两个栈实现一个队列的功能 && 两个队列实现一个栈的功能 && 代码实例
- 用两个栈实现一个队列的功能
- 两个栈实现队列的功能
- 利用两个栈实现队列的功能
- 使用两个堆栈实现队列功能
- 用两个栈实现一个队列的功能 && 两个队列实现一个栈的功能 && 代码实例
- 用两个栈实现一个队列的功能 && 两个队列实现一个栈的功能 && 代码实例
- 面试题7:用两个栈实现队列,队列的声明如下,请实现它的两个函数appendTail和deleteHead, 分别完成在队列尾部插入结点和在队列头部删除节点的功能。
- C/C++之用两个栈实现一个队列的功能
- 两个栈实现队列的功能
- 使用模板类,实现用两个栈模拟队列的功能
- 用两个栈实现一个队列的功能...
- 用两个栈实现一个队列功能
- 两个队列实现栈功能
- 用两个栈实现队列的功能
- 用两个栈实现一个队列的功能
- 分享:两个栈实现一个队列的功能