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

careercup-栈与队列 3.5

时间:2014-12-04 21:25:24      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   for   on   

3.5 实现一个MyQueue类,该类用两个栈来实现一个队列。

解答

队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列如果第二个栈不为空,则直接从第二个栈出队列,否则将第一个栈的数据依次压入第二个栈,然后出栈。每次有数据进入队列,直接进入第一个栈; 每次有数据出队列,在第二个栈不为空时直接从第二个栈出队。

C++实现代码:

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

class MyQueue
{
private:
    stack<int> s1;
    stack<int> s2;
public:
    void push(int x)
    {
        s1.push(x);
    }
    void pop()
    {
        if(s1.empty()&&s2.empty())
            return;
        if(s2.empty()&&!s1.empty())
        {
            while(!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
            s2.pop();
        }
        else
            s2.pop();
    }
    int front()
    {
        if(s1.empty()&&s2.empty())
            return 0;
        if(!s2.empty())
            return s2.top();
        while(!s1.empty())
        {
            s2.push(s1.top());
            s1.pop();
        }
        return s2.top();
    }
    int size()
    {
        return s1.size()+s2.size();
    }
    bool empty()
    {
        return s1.empty()&&s2.empty();
    }
};

int main()
{
    MyQueue q;
    for(int i=0; i<10; ++i)
    {
        q.push(i);
    }
    cout<<q.front()<<endl;
    q.pop();
    q.push(10);
    cout<<q.front()<<endl;
    cout<<q.size()<<" "<<q.empty()<<endl;
    return 0;
}

 

careercup-栈与队列 3.5

标签:style   blog   io   ar   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/wuchanming/p/4143734.html

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