zoukankan      html  css  js  c++  java
  • 用两个栈实现一个队列的功能 && 两个队列实现一个栈的功能 && 代码实例

    用两个栈实现一个队列的功能

    数据结构的说明:

    栈 :先入后出 FILO

    队列:先入先出 FIFO

    实现方式一,具体:

    队列入列:栈A入栈;

    举例:将A.B.C.D入列,从栈顶到栈底依次为:D C B A;

    队列出列:判断栈元素个数是否为1,如为真,弹出;

    如为假,栈A所有元素出栈POP,压入栈B;栈B栈顶元素POP;栈B所有元素压入栈A。

    举例:栈A弹栈,栈B压栈,栈B从栈顶到栈底依次为: A B C D; 将栈顶元素A弹栈,将剩余元素压回栈A;栈A从栈顶到栈底依次为: B C D;

    实现方式二,具体:

    队列入列:判断栈元素个数是否为1,如为真,弹出;

    如为假,栈A所有元素出栈POP,压入栈B;压入新元素到栈A;栈B所有元素压栈入栈A。

    队列出列:栈A出栈;;

    结束,总结:实现了队列的入队和出对操作。

    用两个队列实现一个栈的功能

    实现方式一,具体:

    入栈:所有元素依次入队列A;

    举例:将A.B.C.D入栈,从队列尾部到队列首部依次为:D C B A;

    出栈:判断栈元素个数是否为1,如为真,队列A出列;

    如为假,队列A所有元素出队列,入队列B,最后一个元素不入队列B,输出该元素;队列B所有元素入队列A;

    举例:将D C B A出列,D输出来,C B A入队列B,最后返回到队列A。实现了后进先出。

    实现方式二,具体:

    入栈:和方式一出栈类似

    出栈:和方式一入栈类似

    结束,总结:实现了栈的入栈和出栈操作。

    代码实例

    //用两个栈实现队列的功能
    template<class T>
    class deque_from_stack
    {
    public:
    	deque_from_stack()
    	{
    		size = 0;
    	}
    	void push(T& element)
    	{
    		stack_one.push(element);
    		size = stack_one.size();
    	}
    	T pop()
    	{
    		assert(this->size > 0);
    		T result = 0 ;
    		if(1 == this->size)
    		{
    			result = stack_one.top();
    			stack_one.pop();
    			this->size = 0;
    			return result;
    		}
    		if(this->size > 1)
    		{
    			while(stack_one.size())
    			{
    				stack_two.push(stack_one.top());
    				stack_one.pop();
    			}
    			result = stack_two.top();
    			stack_two.pop();
    			while(stack_two.size())
    			{
    				stack_one.push(stack_two.top());
    				stack_two.pop();
    			}
    			this->size--;
    			return result;
    		}
    	}
    public:
    	stack<T> stack_one;//栈1
    	stack<T> stack_two;//栈2
    	size_t size;//元素的个数计数器
    };
    int main(int argc, char* argv[])
    {
    	int i = 0;
    
    //测试一
    	cout << "deque_from_stack :" <<endl;
    	deque_from_stack<int>d_s_s;
    	for (i = 1; i < 5; i++)
    	{
    		cout << i << " come in " << endl;
    		d_s_s.push(i);
    	}
    	for (i = 1; i < 5; i++)
    	{
    		cout << d_s_s.pop() << " go out " << endl;
    	}
    	cout << endl;
    }
    

      


  • 相关阅读:
    IDEA+SpringMVC+Spring+Mybatis
    WSDL详解
    cxf的使用
    cxf使用wsdl文件生成代码
    给你的博客加上“Fork me on Github”彩带(转)
    老毛桃pe装机工具一键还原系统
    老毛桃pe装机工具备份系统
    java项目中classpath路径到底指的是哪里?
    this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
    Eclipse中导入项目后js报错解决方法(转未解决问题)
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2193461.html
Copyright © 2011-2022 走看看