两个栈模拟一个队列

Posted lweccci

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个栈模拟一个队列相关的知识,希望对你有一定的参考价值。

程序员代码面试指南

----栈和队列

题目描述

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

输入描述:

第一行输入一个整数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;    

 

以上是关于两个栈模拟一个队列的主要内容,如果未能解决你的问题,请参考以下文章

两个栈模拟一个队列的行为

使用两个栈模拟一个队列

使用两个队列模拟一个栈

用两个队列模拟实现一个栈的过程

两个栈模拟一个队列

两个队列模拟一个栈行为;