两个栈模拟一个队列
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;
以上是关于两个栈模拟一个队列的主要内容,如果未能解决你的问题,请参考以下文章