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

原创 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;
}


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

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

【常用算法思路分析系列】栈和队列高频题集(修改版)

本文是【常用算法思路分析系列】的第三篇,分析栈和队列相关的高频题目。本文分析:1、可查询最值的栈;2、用两个栈实现队列的功能;3、反转栈中元素;4、排序栈中元素;5、滑动窗口问题。 本系列前两篇导航:...
  • shakespeare001
  • shakespeare001
  • 2016年05月21日 11:00
  • 5732

【每日算法】栈&队列

栈和队列栈:后进先出(last-in, first-out, LIFO)队列:先进先出(first-in, first-out, FIFO)栈的实现栈的实现有多种方法,比如静态数组、动态数组以及链表。...
  • jiange_zh
  • jiange_zh
  • 2016年02月22日 18:10
  • 1609

栈和队列的算法题总结

有关栈和队列的三道算法题总结
  • Davidddl
  • Davidddl
  • 2017年07月09日 17:53
  • 343

栈和队列面试题(三)

4.元素出栈入栈的合法性,如入栈的序列(1,2,3,4,5),出栈的序列为(4,5,3,2,1). 思想:先入栈一个元素,将出栈序列的第一个元素和该栈的栈顶元素比较,如果相同,那就让该元素出栈且出栈...
  • z_xiao_xue
  • z_xiao_xue
  • 2016年08月24日 14:59
  • 1463

栈和队列算法一之栈的基本操作

栈是限定仅在表尾进行charuhuo
  • thepeakofmountain
  • thepeakofmountain
  • 2014年05月02日 11:25
  • 1008

浅析数据结构与算法1--栈和队列

1. 基本概念 概念很简单,栈 (Stack)是一种后进先出(last in first off,LIFO)的数据结构,而队列(Queue)则是一种先进先出 (fisrt in first out,...
  • baidu_35561918
  • baidu_35561918
  • 2016年08月07日 16:47
  • 362

栈和队列(用C++实现栈和队列)

栈是一种后进先出的线型结构,C++实现栈的代码如下: #include using namespace std; #define MAXLEN 50 typedef struct { char ...
  • v_xchen_v
  • v_xchen_v
  • 2016年06月17日 21:36
  • 1307

栈与队列的相互实现

本文主要讨论队列与栈的相互实现 —— (1) 利用栈实现队列:用两个栈如何做?一个栈呢? (2) 利用队列实现栈:用两个队列如何做?一个队列呢?...
  • u013347704
  • u013347704
  • 2014年03月21日 11:23
  • 2065

数据结构(栈,队列,链表,二叉树)

栈栈作为一种数据结构,用途十分广泛。在回调函数等许多场景中都有应用。我们需要了解它的基本用途,那就是先进后出和队列的先进先出正好相反。最近在学习数据结构和算法,于是自己来实现。我特别喜欢C语言的指针,...
  • u013766436
  • u013766436
  • 2016年05月04日 17:03
  • 1850

栈和队列的基本操作实现

抽象数据类型——栈 顺序存储结构:
  • Sometimes__
  • Sometimes__
  • 2014年11月10日 19:10
  • 2634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法题——栈和队列的互换
举报原因:
原因补充:

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