用两个栈实现队列 【微软面试100题 第五十七题】

 2023-09-05 阅读 29 评论 0

摘要:题目要求:   某队列的声明如下: template<typename T> class CQueue{public:CQueue() {}~CQueue() {}void appendTail(const T& node); // append a element to tailvoid deleteHead(); // remove a element from headprivate:Stack<T> m_st

题目要求:

  某队列的声明如下:

 

   template<typename T> class CQueue{public:CQueue() {}~CQueue() {}void appendTail(const T& node); // append a element to tailvoid deleteHead(); // remove a element from headprivate:Stack<T> m_stack1;Stack<T> m_stack2;};

 

  用两个栈实现队列,实现appendTail()和deleteHead(),分别完成在队列尾部插入结点和在队列头部删除结点的功能。

 

 

题目分析:

  压栈的时候往stack1中压,出栈的时候,如果stack2不为空则,直接出栈stack2,如果stack2空,则把stack1的所有元素依次压入stack2,然后再出栈stack2。举个例子,如下图所示:

 

代码实现:

#include <iostream>
#include <stack>using namespace std;template<class T> 
class CQueue
{
public:CQueue() {}~CQueue() {}void appendTail(const T& node);T 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> 
T CQueue<T>::deleteHead()
{if(m_stack2.size()==0){while(m_stack1.size()){T data = m_stack1.top();m_stack1.pop();m_stack2.push(data);}}if(m_stack2.size()==0)throw new exception("queue is empty");T top = m_stack2.top();m_stack2.pop();return top;}
int main(void)
{CQueue<int> queue;queue.appendTail(1);queue.appendTail(2);cout << queue.deleteHead()<<endl;queue.appendTail(3);cout << queue.deleteHead()<<endl;cout << queue.deleteHead()<<endl;return 0;
}

 

转载于:https://www.cnblogs.com/tractorman/p/4093754.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/1651.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息