C++两个栈实现一个队列

来源:互联网 发布:nginx配置域名绑定ip 编辑:程序博客网 时间:2024/05/22 10:23
#include <iostream>
using namespace std;
#include <stack>
class Queue{
public:
    stack<int> myStack1;
    stack<int> myStack2;
    void push(int t){
        myStack1.push(t);
    }
    int pop(){
        if (empty())
        {
            return NULL;
        }
        else if (myStack2.empty())
        {
            int size=myStack1.size();
            for (int i=0;i<size;i++)
            {
                myStack2.push(myStack1.top());
                myStack1.pop();
            }
        }
        int temp=myStack2.top();
        myStack2.pop();
        return temp;
    }
    bool empty(){
        bool b=false;
        if (myStack2.empty()&&myStack1.empty())
        {
            b=true;
        }
        return b;
    }
    int size(){
        int temp=myStack1.size();
        temp+=myStack2.size();
        return temp;
    }
    //取队首元素
    int front(){
        int result=NULL;
        if (empty())
        {
            return result;
        }
        else if (myStack2.empty())
        {
            int size=myStack1.size();
            for (int i=0;i<size;i++)
            {
                myStack2.push(myStack1.top());
                myStack1.pop();
            }
        }
        result=myStack2.top();
        return result;
    }
    //取队尾元素
    int back(){
        int result=NULL;
        if (empty())
        {
            return result;
        }
        else if (!myStack1.empty())
        {
            result=myStack1.top();
        }else{
            int size=myStack2.size();
            for (int i=0;i<size;i++)
            {
                myStack1.push(myStack2.top());
                myStack2.pop();
            }
            result=myStack1.top();
        }
        return result;
    }
    
};

void main()
{
    Queue *queue=new Queue();
    for (int i=0;i<10;i++)
    {
        queue->push(i);
    }
    
    for (int i=0;i<5;i++)
    {
        cout<<queue->pop()<<endl;
    }

    cout<<"front:"<<queue->front()<<endl;
    cout<<"back:"<<queue->back()<<endl;
    for (int i=10;i<20;i++)
    {
        queue->push(i);
    }
    cout<<"pop5-19"<<endl;
    cout<<"queuesize"<<queue->size()<<endl;
    for (int i=0;true;i++)
    {
        if (queue->empty())
        {
            break;
        }
        cout<<queue->pop()<<endl;
    }

}
0 0
原创粉丝点击