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

原创 2015年11月18日 20:10:00

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


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

版权声明:转载时请务必标明出处,尊重博主的劳动成果 ^_^

相关文章推荐

面试算法——2.双栈实现队列

面试算法,双栈实现队列

数据结构与算法分析(二) —— 关于表、栈和队列的深入探讨

本文讨论三种最简单的数据结构,也是抽象数据类型(ADT)的最基本的例子:表、栈和队列。1、ADTADT即带有一组操作的一些对象的集合。诸如表、集合、图以及它们与各自的操作一起形成的这些对象都可以被看做...

数据结构与算法概述讲座总结二——栈与队列

这是数据结构与算法概述系列讲座的第二期,同样的,希望能通过总结讲座内容,将讲座的知识引入脑海,加深印象,转化为自己的知识。

数据结构算法代码实现——栈和队列(二)

队列的定义 和栈相反,队列(queue)是一种先进先出(FIFO)的线性表。它只允许在表的一端经行插入,而在另一端删除删除。 我们把允许进行删除的一端称为队头,允许插入的一端称为队尾。 在插入新元...

直通BAT面试算法总结——栈和队列

题一:栈的逆序 /** * 题干: * 实现一个栈的逆序,但是只能用递归函数和这个栈本身的pop操作来实现,而不能自己申请另外的数据结构。 * 给定一个整数数组A即为给定的栈,同时给定它的大小n...

经典算法题——第九题 优先队列

前端时间玩小爬虫的时候,我把url都是放在内存队列里面的,有时我们在抓取url的时候,通过LCS之类的相似度比较,发现某些url是很重要的, 需要后端解析服务器优先处理,针对这种优先级比较大的u...

数据结构与算法(java)——栈和队列

栈与队列

数据结构算法代码实现——栈和队列(一)

栈和队列 栈和队列是一种特殊的线性表。 从数据结构角度看:栈和队列也是线性表,其特点性在于栈和队列的基本操作是线性表操作的子集。它们是操作受限的线性表。 从数据类型角度看:它们是和线性表不相同的两类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)