关闭

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

246人阅读 评论(0) 收藏 举报
分类:

问题描述:(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;
}


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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:222338次
    • 积分:4184
    • 等级:
    • 排名:第7355名
    • 原创:194篇
    • 转载:1篇
    • 译文:0篇
    • 评论:70条
    博客专栏
    打赏作者
    微信