• 两个栈来实现一个队列的C++代码


           利用两个栈来实现一个队列, 这个问题非经常见。  最关键的是要有好的思路, 至于实现, 那是非常easy的事情了。 在本文中, 也想说说自己的思路, 可是。 我认为用代码来表述思路更符合我的习惯。 也是我的菜, 所以, 只给出代码。 如有须要。 大家能够依据代码来理解思路。

           OK, 没有必要废话了, 直接上代码:

    #include <iostream>
    #include <stack>
    using namespace std;
    
    
    // 用两个stack实现一个queue, 以int类型为例吧
    class MyQueque
    {
    private:
    	stack<int> s1; // s1负责入队
    	stack<int> s2; // s2负责出队
    	
    public:
    	// 入队
    	void push(int x)
    	{
    		s1.push(x);
    	}
    
    	// 出队
    	void pop()
    	{
    		if(!s2.empty())
    		{
    			s2.pop();
    		}
    		else
    		{
    			while(!s1.empty())
    			{
    				int tmp = s1.top();
    				s1.pop();
    				s2.push(tmp);
    			}
    
    			s2.pop();
    		}
    	}
    
    	// 取头
    	int front()
    	{
    		if(!s2.empty())
    		{
    			return s2.top();
    		}
    
    		while(!s1.empty())
    		{
    			int tmp = s1.top();
    			s1.pop();
    			s2.push(tmp);
    		}
    
    		return s2.top();
    	}
    
    	// 取尾
    	int back()
    	{
    		if(!s1.empty())
    		{
    			return s1.top();
    		}
    
    		while(!s2.empty())
    		{
    			int tmp = s2.top();
    			s2.pop();
    			s1.push(tmp);
    		}
    
    		return s1.top();
    	}
    
    	// 求大小
    	int size()
    	{
    		return s1.size() + s2.size();
    	}
    
    	// 推断是否为空
    	bool empty()
    	{
    		if(s1.empty() && s2.empty())
    		{
    			return true;
    		}
    
    		return false;
    	}
    };
    
    
    int main()
    {
    	{
    		MyQueque que;
    		que.push(1);
    		que.push(2);
    		que.push(3);
    		que.push(4);
    		que.push(5);
    
    		while(!que.empty())
    		{
    			cout << que.front() << endl;
    			que.pop();
    		}
    
    		cout << "-------------------" << endl;
    	}
    
    
    	{
    		MyQueque que;
    		que.push(1);
    		que.push(2);
    		que.push(3);
    		que.push(4);
    		que.push(5);
    
    		while(!que.empty())
    		{
    			cout << que.size() << endl;
    			que.pop();
    		}
    
    		cout << "-------------------" << endl;
    	}
    
    
    	{
    		MyQueque que;
    		que.push(1);
    		que.push(2);
    		que.push(3);
    		que.pop();
    		que.pop();
    		que.push(4);
    		que.push(5);
    
    		while(!que.empty())
    		{
    			cout << que.front() << endl;
    			que.pop();
    		}
    
    		cout << "-------------------" << endl;
    	}
    
    	return 0;
    }
           结果:

    1
    2
    3
    4
    5
    -------------------
    5
    4
    3
    2
    1
    -------------------
    3
    4
    5
    -------------------


            我写完上述代码后, 简单走读了一下代码, 并測试了一下, 初步发现还OK,   假设大家发现有什么问题。 欢迎指出, 在此,先感谢一下。 




  • 相关阅读:
    ORA-01733: virtual column not allowed here
    五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!
    五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!
    关于Java中equal函数和==的一些区别
    <Android Framework 之路>Android5.1 Camera Framework(四)——框架总结
    Sqlite基本命令集合(linux/fedora/ubuntu)
    简介分布式计算系统的硬件架构
    <Android Framework 之路>Android5.1 Camera Framework(三)
    “调试器的协议与调试对象不兼容”错误的解决
    log4j:WARN Please initialize the log4j system properly.解决方案
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6784942.html
Copyright © 2020-2023  润新知