zoukankan      html  css  js  c++  java
  • 013实现使用两个堆栈队列(keep it up)

    实现使用两个堆栈队列
    FIFO队列是一种数据结构(FIFO),后堆叠前进出的数据结构的(FILO)。 
    两个栈实现的最简单的方法就是排队:队列中的第一个推栈, 
    队列将数据顺序的第一个堆栈推入第二堆叠,然后叠加.
    两个规则:
    1)进队列,则直接压入第一个栈
    2)出队列,若果第二个栈不为空。直接pop(),如过第二个栈为空,

    则把第一个栈中的数据所有压入第二个栈(第一个栈此时为空)。

    实际写代码时注意栈为空的情况。

    代码:

    #include <iostream>
    #include <stack>
    
    class Queue
    {
    public:
    	Queue() {}
    	~Queue() {}
    
    	void push(int vData)
    	{
    		m_First.push(vData);
    	}
    
    	void pop()
    	{
    		if (m_Second.empty())
    		{
    			if (m_First.empty())
    			{
    				std::cout << "the queue is empty" << std::endl;
    				return ;
    			}
    			move(m_First, m_Second);
    			m_Second.pop();
    		}
    	}
    
    	int top()
    	{
    		if (m_Second.empty())
    		{
    			if (m_First.empty())
    			{
    				std::cout << "the queue is empty" << std::endl;
    				return ;
    			}
    			move(m_First, m_Second);
    		}
    		return m_Second.top();
    	}
    
    	int back()
    	{
    		if (m_First.empty())
    		{
    			if (m_Second.empty())
    			{
    				std::cout << "the queue is empty" << std::endl;
    				return ;
    			}
    			move(m_Second, m_First);
    		}
    		return m_First.top();
    	}
    
    private:
    	void move(std::stack<int>& vL, std::stack<int>& vR)
    	{
    		while (!vL.empty())
    		{
    			vR.push(vL.top());
    			vL.pop();
    		}
    	}
    
    private:
    	std::stack<int> m_First;
    	std::stack<int> m_Second;
    };
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    java
    GO学习Day2
    GO学习Day1
    APS定时任务框架
    用微信每天给女朋友说晚安
    人生苦短,我用python
    Python 捕获terminate信号优雅关闭进程
    Python 多线程及多进程结合使用
    Python API 接口权限控制思路
    Docker runC 严重安全漏洞CVE-2019-5736 导致容器逃逸
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4725480.html
Copyright © 2011-2022 走看看