• 用两个队列实现一个栈


    前面说了用两个栈实现一个队列的算法,现在在写一个反过来的算法:

    1.算法描述:

    栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法:

    先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思:


    图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路,我给出以下代码:供自己参考:

    /*
    *设有两个队列A和B,栈的push操作,直接push到A的队尾就行了。
    *栈的pop操作时,将A中的队列依次取出放到B中,取到最后一个时,
    *最后一个不要放到B中,直接删掉,再将B中的值依次放回A中。
    *栈的top操作时,将A中的队列依次取出放到B中,取到最后一个时,
    *将最后一个值记录下来,再将最后一个值放到B中,再将B中的值依次放回到A中
    */
    
    #include<iostream>  
    #include <queue>  
    using namespace std; 
    
    template<class T>
    class Mystack
    {
    public:
    	Mystack()
    	{}
    	~Mystack()
    	{}
    public:
    	void Push(T value);
    	T Top();
    	T Pop();
    private:
    	queue<T> Queue1;
    	queue<T> Queue2;
    };
    
    //入栈
    template<class T>
    void Mystack<T>::Push(T a)
    {
    	Queue1.push(a);
    }
    
    //栈顶
    template<class T>
    T Mystack<T>::Top()
    {
    	return Queue1.back();//???????????这里是否可以
    }
    
    //出栈
    template<class T>
    T Mystack<T>::Pop()
    {
    	int node = 0;
    	while(Queue1.back() != Queue1.front())
    	{
    		int num = Queue1.front();
    		Queue2.push(num);
    		Queue1.pop();
    	}
    	node = Queue1.back();
    	Queue1.pop();
    
    	while(!Queue2.empty())
    	{
    		int num = Queue2.front();
    		Queue1.push(num);
    		Queue2.pop();
    	}
    	return node;
    }
    void Test()
    {
    	Mystack<int> s1;
    	s1.Push(1);
    	s1.Push(2);
    	s1.Push(3);
    	s1.Push(4);
    	s1.Push(5);
        cout<<s1.Top()<<endl;
    	for(int i = 0; i < 5; i++)
    	{
    		cout<<s1.Pop()<<"->";
    	}
    	cout<<"NULL"<<endl;
    }
    
    int main()
    {
    	Test();
    	return 0;
    }

  • 相关阅读:
    结对作业
    小学算术题四则运算(升级)
    自动生成小学四则运算题目(Python实现)
    《基于CMMI的软件工程及实训指导》第一章 软件工程基础
    使用 python 进行微信好友分析
    中国大学排名
    python小程序测试
    爬虫测试
    体育竞技分析

  • 原文地址:https://www.cnblogs.com/melons/p/5791848.html
Copyright © 2020-2023  润新知