两个栈实现一个队列
2011-08-24 17:20
639 查看
一问题描述
两个栈实现一个队列的操作
appendTail
将要插入的元素push进s1。注意此处不需要,再把s2中的元素导入到s1了,因为s1和s2两者的顺序是相反的。
deleteHead
如果s2中的元素不为空,则直接弹出栈顶
若为空,则需要把s1中的元素依次push进s2中,并删除s2中的栈顶
综上
可以直接插入s1中元素,删除时,若是s2为空,则需要把s1中的元素插入进s2中,然后对s2实行删除操作。
二 代码如下
#include <iostream>
#include <stack>
#include <assert.h>
using namespace std ;
template <class T>
class CQueue
{
public :
CQueue() {}
~CQueue() {}
void appendTail(const T & node) ;
void deleteHead() ;
private :
stack <T> m_stack1 ;
stack <T> m_stack2 ;
} ;
template <class T>
void CQueue<T>::appendTail(const T & node) //添加尾部
{
m_stack1.push(node) ;
}
template <class T>
void CQueue<T>::deleteHead() //删除头部
{
if(!m_stack2.empty())
{
cout<<m_stack2.top()<<endl ;
m_stack2.pop() ;
}
else
{
assert(!m_stack1.empty()) ; //两个栈都为空,则出现异常错误
while(!m_stack1.empty()) //将s1中的元素全部push进s2,最后在s2中=删除栈顶
{
m_stack2.push(m_stack1.top()) ;
m_stack1.pop() ;
}
}
}
int main()
{
CQueue<int> queue ;
/* queue.appendTail(5) ;
queue.appendTail(4) ;
queue.appendTail(3) ;
*/
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
queue.appendTail(2);
queue.appendTail(1);
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
system("pause") ;
return 0 ;
}
两个栈实现一个队列的操作
appendTail
将要插入的元素push进s1。注意此处不需要,再把s2中的元素导入到s1了,因为s1和s2两者的顺序是相反的。
deleteHead
如果s2中的元素不为空,则直接弹出栈顶
若为空,则需要把s1中的元素依次push进s2中,并删除s2中的栈顶
综上
可以直接插入s1中元素,删除时,若是s2为空,则需要把s1中的元素插入进s2中,然后对s2实行删除操作。
二 代码如下
#include <iostream>
#include <stack>
#include <assert.h>
using namespace std ;
template <class T>
class CQueue
{
public :
CQueue() {}
~CQueue() {}
void appendTail(const T & node) ;
void deleteHead() ;
private :
stack <T> m_stack1 ;
stack <T> m_stack2 ;
} ;
template <class T>
void CQueue<T>::appendTail(const T & node) //添加尾部
{
m_stack1.push(node) ;
}
template <class T>
void CQueue<T>::deleteHead() //删除头部
{
if(!m_stack2.empty())
{
cout<<m_stack2.top()<<endl ;
m_stack2.pop() ;
}
else
{
assert(!m_stack1.empty()) ; //两个栈都为空,则出现异常错误
while(!m_stack1.empty()) //将s1中的元素全部push进s2,最后在s2中=删除栈顶
{
m_stack2.push(m_stack1.top()) ;
m_stack1.pop() ;
}
}
}
int main()
{
CQueue<int> queue ;
/* queue.appendTail(5) ;
queue.appendTail(4) ;
queue.appendTail(3) ;
*/
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
queue.appendTail(2);
queue.appendTail(1);
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
queue.deleteHead() ;
system("pause") ;
return 0 ;
}
相关文章推荐
- 如何用两个队列实现一个栈,并分析有关栈操作的运行时间。
- 用两个栈来实现一个队列
- 用两个栈实现一个队列 & 用两个队列实现一个栈
- 两个栈实现一个队列与两个队列实现一个栈
- 利用两个队列实现一个栈(C++版)
- 两个栈实现一个队列-----两个队列实现一个栈
- 用两个栈实现一个队列——我作为面试官的小结
- 两个栈实现一个队列的功能
- 用两个队列实现一个栈
- 【题目5】如何使用两个栈来实现一个队列
- 剑指offer 7---使用两个栈实现一个队列
- C++算法之 用两个栈实现一个队列
- 剑指offer-用两个栈实现一个队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 两个队列实现一个栈
- 用两个栈模拟实现一个队列
- 栈和队列的面试题(四)---用两个栈实现一个队列
- 数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈
- 两个队列实现一个栈
- C++两个队列实现一个栈