栈与队列的转换

 

 

队列转换为栈

一个队列队列通过元素循环放置将前面的元素放在后面,将最后一个元素移到最前面弹出,循环往返,不断弹出元素。

#include<iostream>
#include<queue>
using namespace std;
class MyStack
{
	public :
		
			queue<int> que;
		myStack(){
		
					}
		void push(int x)
		{
			que.push(x);
		}
		int pop()
		{
			
			int size=que.size();
			size--;
			while(size--)
			{
				que.push(que.front());
				que.pop();
			
			}
			int result=que.front();
			que.pop();
			return result;
			
		}
		int top()
		{
			
			return que.back();
		}
		bool empty()
		{
			return que.empty();
			
			
		}
	
	
};


int main()
{
	MyStack stack;
	stack.push(3);
	stack.push(4);
	stack.push(5);
	stack.push(6);
	cout<<stack.pop()<<endl;
	

	return 0;
}

  

 

 

 

栈转换为对列

通过两个栈实现对列,一个做为出口栈,一个作为入口栈,将入口栈元素顺序弹出,压入到出口栈中实现,出口栈中的顺序被倒置,然后不断弹出,实现对列

 

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

class MyQueue{
	
	public :
		MyQueue(){
			
		}
		stack<int> stIn;
		stack<int> stOut;
		void push(int x)
		{
			stIn.push(x);
		}
		int pop()
		{
			if(stOut.empty())
			{
				
				while(!stIn.empty())
				{
					stOut.push(stIn.top());
					stIn.pop();
					
				}
				
			
				
			}
			int result =stOut.top();
			stOut.pop();
			return result;
			
		}
		int peek()
		{
			int res=this->pop();
			stOut.push(res);
			return res;
			
		}
		bool empty()
		{
			return stIn.empty()&&stOut.empty();
			
		}
		

	
};



int main()
{
	MyQueue que;
	que.push(2);
	que.push(3);
	que.push(4);
	que.push(5);
	cout<<que.pop()<<endl;
	cout<<que.empty()<<endl;

	
	return 0;
 }