only_do_IT

路漫漫其修远兮,吾将上下而求索

算法题——栈和队列的互换

问题描述:(1). 用两个栈实现一个队列   (2).用两个队列实现一个栈

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

//用两个栈实现一个队列
template<class T>
class MyQueue
{
public:
	MyQueue();
	~MyQueue();
	void PushQTail(const T& node);
	T DeleQHead();
private:
	stack<T> stack1;
	stack<T> stack2;
};

template<class T>
void MyQueue<T>::PushQTail(const T& node)
{
	stack1.push(node);
}

template<class T>
T MyQueue<T>::DeleQHead()
{
	T ret;
	if (stack2.empty())
	{
		if (stack1.empty())
			return NULL;
		while (!stack1.empty())
		{
			T tmp = stack1.top();
			stack1.pop();
			stack2.push(tmp);
		}
	}
	ret = stack2.top();
	stack2.pop();
	return ret;
}



//用两个队列实现栈
template <class T>
class Mystack
{
public:
	Mystack();
	~Mystack();
	void PushSTail(const T& node);
	T DeleSHead();

private:
	queue<T> queue1;
	queue<T> queue2;
};

template<class T>
void Mystack<T>::PushSTail(const T& node)
{
	if (queue2.empty())
	{
		queue1.push(node);
	}
	queue2.push(node);
}

template<class T>
T Mystack<T>::DeleSHead()
{
	T ret;
	if (queue1.empty() && queue2.empty())
	{
		return NULL;
	}
	else if (queue2.empty())
	{
		while (queue1.size() != 1)
		{
			T tmp = queue1.front();
			queue1.pop();
			queue2.push(tmp);
		}
		ret = queue1.front();
		queue1.pop();
	}
	else
	{
		while (queue2.size != 1)
		{
			T tmp = queue2.front();
			queue2.pop();
			queue1.push(tmp);
		}
		ret = queue2.front();
		queue2.pop();
	}
	return ret;
}


具体的实现和测试没有写,主要是对栈和队列的理解。

阅读更多
版权声明:转载时请务必标明出处,尊重博主的劳动成果 ^_^ https://blog.csdn.net/zr1076311296/article/details/49912349
个人分类: 笔试题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

算法题——栈和队列的互换

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭