双栈实现队列

主要思想

有两个栈stack1stack2
在push时,直接压入stack1
在pop时,判断stack2是否为空,空则将stack1的数据压入stack2,不空则只需将stack2的栈顶弹出。

代码实现

#ifndef _MYQUEUE_H_
#define _MYQUEUE_H_

#include<iostream>
#include<stack>
using namespace std;

template<class T> class Test
{
public:
    Test();
    T pop();
    void push(T element);
private:
    stack<T> stk1;
    stack<T> stk2;

    
};
template<class T> Test<T>::Test() { }

template<class T> T Test<T>::pop()
{
    //TODO:检查stk2中是否为空,不空,则直接弹出stk2的栈顶;
    //否则,将stk1中的size-1个倒入stk2;返回stk1    栈底元素
    T retVal;
    if (!stk2.empty())
    {
        retVal = stk2.top();
        stk2.pop();
        return retVal;
    }
    else
    {
        T tmp;
        while (stk1.size() > 1)
        {
            tmp = stk1.top();
            stk2.push(tmp);
            stk1.pop();
        }
        tmp = stk1.top();
        stk1.pop();
        retVal = tmp;
        return retVal;
    }
}

template<class T> void Test<T>::push(T element)
{
    stk1.push(element);
}

#endif

注意,模板类的声明和定义需要在一个文件中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析:一个队列包含...
    levinhax阅读 12,381评论 0 4
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 5,641评论 0 3
  • 一、栈 1.1 栈的实现 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。java没有栈这样的数据结...
    yjaal阅读 5,282评论 0 1
  • 感赏老公昨天回家做晚饭给我们吃。出门前,我让他炸排骨,他虽然嘴上说已经有很多菜了,做多会吃不完,等我和儿子回到家,...
    丽丽丫丫阅读 1,196评论 0 0
  • Dillinger Dillinger is a cloud-enabled, mobile-ready, off...
    临城阅读 2,929评论 0 1