两个栈模拟一个队列

时间:2019-08-31
本文章向大家介绍两个栈模拟一个队列,主要包括两个栈模拟一个队列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

程序员代码面试指南

----栈和队列

题目描述

用两个栈实现队列,支持队列的基本操作。

输入描述:

第一行输入一个整数N,表示对队列进行的操作总数。

下面N行每行输入一个字符串S,表示操作的种类。

如果S为"add",则后面还有一个整数X表示向队列尾部加入整数X。

如果S为"poll",则表示弹出队列头部操作。

如果S为"peek",则表示询问当前队列中头部元素是多少。

输出描述:

对于每一个为"peek"的操作,输出一行表示当前队列中头部元素是多少。

思路
  • push_back操作:stack1.push(new element),将入队的元素都先存在stack1中
  • pop_front,front操作:stack2用于存储队列的头部信息

   首先判断stack2是否为空,如果stack2为空,先将stack1中的元素出栈,然后按顺序压入stack2中

   如果stack2非空,pop_front = stack2.pop(), front = stack2.top();

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
    int N;
    stack<int> stack1, stack2;
    string tmp;
    cin >> N;
    for(int i = 0; i < N; i++){
        cin >> tmp;
        if(tmp == "add") {
            int num;
            cin >> num;
            stack1.push(num);
        }
        else{
            if(stack2.empty()){
                while(!stack1.empty()){
                    stack2.push(stack1.top());
                    stack1.pop();
                }
            }
            if(!stack2.empty()){
                if(tmp == "peek") 
                    cout << stack2.top() <<endl;
                else if(tmp == "poll")
                    stack2.pop();
            }
        }
    }
    return 0;    
}

原文地址:https://www.cnblogs.com/lweccci/p/11440803.html