码迷,mamicode.com
首页 > 其他好文 > 详细

【华为练习题】用两个栈来模拟队列(中级)

时间:2016-08-23 13:24:47      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

【华为练习题】用两个栈来模拟队列(中级)

题目

栈的特点是后进先出,队列的特点是先进先出。所以,用两个栈S1和S2模拟一个队列时,
要求两个栈S1和S2的长度都是5。
要求实现以下函数:
enQueue 将元素value插入队列,若入队列成功返回true,否则返回false
deQueue 从队列中取出一个元素放入value,若出队列成功返回true,否则返回false。
isEmptyQueue 判用队列是否为空,如果是空则返回true,如果不是空则返回false。

分析

S1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈S1退栈并逐
个压入栈S2中,S1中最先入栈的元素,在S2中处于栈顶。S2退栈,相当于队列的出队,实
现了先进先出。

解答

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

const static size_t STACK_SIZE = 5;

template <typename T> class MyQueue
{
public:
    bool enQueue(const T&);
    bool deQueue(T&);
    bool isEmptyQueue();
private:
    stack<T> s1;
    stack<T> s2;
};

template <typename T> bool MyQueue<T>::enQueue(const T &value){
    if (s1.size() < STACK_SIZE)
    {
        s1.push(value);
        return true;
    }
    if (s2.empty())
    {
        while (!s1.empty())
        {
            s2.push(s1.top());
            s1.pop();
        }
        s1.push(value);
        return true;
    }
    return false;
}

template <typename T> bool MyQueue<T>::deQueue(T &value){
    if (!s2.empty())
    {
        value = s2.top();
        s2.pop();
        return true;
    }
    if (!s1.empty())
    {
        while (!s1.empty())
        {
            s2.push(s1.top());
            s1.pop();
        }
        value = s2.top();
        s2.pop();
        return true;
    }
    return false;
}

template <typename T> bool MyQueue<T>::isEmptyQueue(){
    return s1.empty() && s2.empty();
}

【华为练习题】用两个栈来模拟队列(中级)

标签:

原文地址:http://blog.csdn.net/sps900608/article/details/52288824

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!