[剑指offer]面试题7:用两个栈实现队列
Posted Wecccccccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer]面试题7:用两个栈实现队列相关的知识,希望对你有一定的参考价值。
面试题7:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
用两个栈模拟一个队列的操作:
代码如下:
#include <iostream>
#include <stack>
using namespace std;
template <typename T>
class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T&element);
T deleteHead();
private:
stack<T>stack1;
stack<T>stack2;
};
template<typename T>
void CQueue<T>::appendTail(const T&element)
{
stack1.push(element);
}
template<typename T>
T CQueue<T>::deleteHead()
{
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
T &data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if (stack2.size() == 0) throw new exception("queue is empty");
T head = stack2.top();
stack2.pop();
return head;
}
测试用例:
● 往空的队列里添加、删除元素。
● 往非空的队列里添加、删除元素。
● 连续删除元素直至队列为空。
本题考点:
● 考查对栈和队列的理解。
● 考查写与模板相关的代码的能力。
● 考查分析复杂问题的能力。本题解法的代码虽然只有只有20几行代码,但形成正确的思路却不容易。应聘者能否通过具体的例子分析问题,通过画图的手段把抽象的问题形象化,从而解决这个相对比较复杂的问题,是能否顺利通过面试的关键。
以上是关于[剑指offer]面试题7:用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章