面试题用两个栈构造一个队列和用两个队列构造一个栈

用两个栈构造一个队列

template 
class queue
{
	private:
		stack s1;
		stack s2;
	public:
		
		void append_tail(T e);
		T delete_head();
};

template 
void pour_stack(stack &src, stack &dest)
{
	while( !src.empty() )
	{
		dest.push(src.pop());
	}
}

void append_tail(T e)
{
	if( !s2.empty() )
	{
		pour_stack(s2, s1);
	}
	
	s1.push(e);
}

T delete_head()
{
	if( s2.empty() && !s1.empty() )
	{
		pour_stack(s1, s2);
	}
	
	if( !s2.empty() )
	{
		return s2.pop();
	}
	else
	{
		return NULL;
	}
}

用两个队列构造一个栈

template 
class stack
{
	private:
		queue q1;
		queue q2;
	public:
		void push(T e);
		T pop();
};

void push(T e)
{
	if( q1.empty() )
	{
		q1.append_tail(e);
		
		while( !q2.empty() )
		{
			q1.append_tail(q2.delete_head());
		}
	}

	if( q2.empty() )
	{
		q2.append_tail(e);
		
		while( !q1.empty() )
		{
			q2.append_tail(q1.delete_head());
		}
	}	
}

T pop()
{
	bool IsStackEmpty = true;
	if( !s1.empty() ) 
	{
		s1.delete_head();
		IsStackEmpty = false;
	}
	
	if( !s2.empty() ) 
	{
		s2.delete_head();
		IsStackEmpty = false;
	}
	
	if(IsStackEmpty)
	{
		return NULL;
	}
}


你可能感兴趣的:(algo/data,struct)