zoukankan      html  css  js  c++  java
  • 两个栈来实现一个队列的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,   假设大家发现有什么问题。 欢迎指出, 在此,先感谢一下。 




  • 相关阅读:
    Vue 使用Scss,深度修改局部样式
    Sublime Text 插件:批量删除空白行
    Sublime Text 3前端开发常用优秀插件介绍
    常用的sublime text 3插件(很爽哦)
    20 个强大的 Sublime Text 插件
    Java多线程之synchronized详解
    进阶Java多线程
    初识Java多线程
    分布式锁实现的正确打开方式
    分布式session实现方式
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6784942.html
Copyright © 2011-2022 走看看