[剑指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:用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——面试题9:用两个栈实现队列》代码

剑指offer-面试题9-用两个栈实现队列-栈和队列

剑指Offer:面试题09. 用两个栈实现队列

用两个栈实现队列 (剑指offer第7题)

校招面试 之 剑指offer第9-1题 用两个栈实现一个队列

校招面试 之 剑指offer第9-2题 用两个队列实现一个栈