两个队列实现栈和两个栈实现队列

栈:先进后出

队列:先进先出

1:两个队列实现栈:

队列A

队列B

入栈:入队列A, 1,2,3,4 入栈,在队列A里为 A: 1,2,3,4

出栈,将队列A中的元素入队列B直到队列A里的元素只剩下一个,则队A为4,队B为1,2,3,A:4,B:1,2,3,输出A队头4

#include <queue>
#include <iostream>
using namespace std;
queue<int> A,B;
void PushStack(int value)//向非空的那个队列入队
{
	if (!A.empty()==true&&B.empty()==true)
	{
		A.push(value);
	}
	else if (!B.empty()==true&&A.empty()==true)
	{
		B.push(value);
	}
	else //A B均为空
	{
		A.push(value);
	}
}
int PopStack()//由非空的队列向空队列入队,知道剩下最后一个元素
{
	int m = 0;
	if (!A.empty()==true&&B.empty()==true)
	{
		while(A.size()!=1)
		{
			B.push(A.front());
			A.pop();
		}
		m = A.front();
		A.pop();
		return m;
	}
	else if (!B.empty()==true&&A.empty()==true)
	{
		while(B.size()!=1)
		{
			A.push(B.front());
			B.pop();
		}
		m = B.front();
		B.pop();
		return m;
	}
	return 0;
}
int main()
{
	for (int i = 1; i < 5; i++)
	{
		PushStack(i);
	}
	cout<<PopStack()<<endl;
	PushStack(10);
	PushStack(12);
	for (int i = 1; i < 4; i++)
	{
		cout<<PopStack()<<endl;
	}
	system("pause");
}
2:两个栈实现队列

A:入栈队

B:出栈队

由于栈为先进后出,两个栈正好满足先进先出

入队:

入栈A,A:1,2,3,4

出队:将栈A的元素入栈B,直到为空,B:4,3,2,1;出栈1

#include<iostream>
#include<stack>
using namespace std;
stack<int> A,B;
void PushQueue(int value)
{
	A.push(value);
}
int PopQueue()
{
	int m;
	while (!A.empty())
	{
		B.push(A.top());
		A.pop();
	}
	if (!B.empty())
	{
		m = B.top();
		B.pop();	
	}
	else m = 0;	
	while(!B.empty())
	{
		A.push(B.top());
		B.pop();
	}
	return m;
}

int main()
{
	int m ;
	for (int i = 1; i < 6; i++)
	{
		PushQueue(i);
	}
	for (int i = 1; i < 4; i++)
	{
		int m1 = PopQueue();
		cout<<m1<<endl;
	}
	PushQueue(7);
	PushQueue(8);
	while(m = PopQueue())cout<<m<<endl;
	system("pause");
	return 0;
}



posted @ 2012-04-11 12:43  foreverlearn  阅读(193)  评论(0编辑  收藏  举报