【校招面试 之 剑指offer】第9-2题 用两个队列实现一个栈

#include<iostream>
#include<queue>
using namespace std;
// 对于出栈解决的思路是:将queue1的元素除了最后一个外全部放到queue2中,然后再pop出queue1的最后一个元素...
template<typename T>
void popStack(queue<T> &queue1, queue<T> &queue2){
	if(queue1.size() == 0)
		return;
	// 将queue1中的元素除了最后一个元素外,依次入队queue2中
	while(queue1.size() - 1){
		queue2.push(queue1.front());
		queue1.pop();
	}
	cout<<"出队元素为:"<<queue1.front()<<endl;
	queue1.pop();
	// 将queue2的元素放回到queue1中
	while(queue2.size()){
		queue1.push(queue2.front());
		queue2.pop();
	}
}

template<typename T>
void printStack(queue<T> &queue1){
	while(!queue1.empty()){
		cout<<queue1.front()<<" ";
		queue1.pop();
	}
}

int main(){

	queue<int> queue1;
	queue<int> queue2;

	// 1.实现入栈操作
	queue1.push(100);
	queue1.push(200);
	queue1.push(300);

	// 2.实现出栈操作
	popStack(queue1, queue2);

	queue1.push(400);
	queue1.push(500);

	popStack(queue1, queue2);

	printStack(queue1);

	system("pause");
	return 0;
}

运行结果:

原文地址:https://www.cnblogs.com/xuelisheng/p/9357317.html

时间: 2024-07-30 09:19:46

【校招面试 之 剑指offer】第9-2题 用两个队列实现一个栈的相关文章

【校招面试 之 剑指offer】第9-1题 用两个栈实现一个队列

#include<iostream> #include<stack> using namespace std; template <typename T> void pushQueue(stack<T> &stack1, T t){ stack1.push(t); } template<typename T> T popQueue(stack<T> &stack1, stack<T> &stack2

【校招面试 之 剑指offer】第10-3题 矩阵覆盖问题

题目:我们可以使用2??1的小矩形横着或者竖着去覆盖更大的矩形.请问用8个2??1的小矩形无重叠地覆盖一个2??8的大矩形,共有多少种方法? 分析:当放第一块时(假定从左边开始)可以横着放,也可以竖着放,记总的情况为f(8).如果是竖着放,则记下来还有f(7)种放法:若是横着放,则下一块必须横着放,则还有f(6)种放法. 所以可以推导出公式:f(1) = 1 f(2) = 2 f(n)(n为偶数) = f(n-1)+f(n-2); #include<iostream> #include<

【校招面试 之 剑指offer】第16题 数值的整数次方

方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typename T> T myPow(T a, int m){ double base = 1; int flag = (m < 0) ? -1 : 1; int n = (m < 0) ? -m : m; while(n > 0){ base = base * a; n --; } if

剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的.push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素). 1

《剑指Offer》附加题_用两个队列实现一个栈_C++版

在<剑指Offer>中,在栈和队列习题中,作者留下来一道题目供读者自己实现,即"用两个队列实现一个栈". 在计算机数据结构中,栈的特点是后进先出,即最后被压入(push)栈的元素会第一个被弹出(pop);队列的特点是先进先出,即第一个进入队列的元素将会被第一个弹出来.虽然栈和队列特点是针锋相对,但是两者却相互联系,可以互相转换. 在"用两个队列实现一个栈"问题中,我们用两个队列的压入和弹出来模拟栈的压入和弹出.我们通过画图的手段把抽象的问题形象化. 在上

剑指offer 42.和为S的两个数字

剑指offer 42.和为S的两个数字 题目 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路 同样是滑动窗口题目,设置左右两个游标,然后计算和,若和小,那么左侧游标增加,区间和大,右侧游标减小,保存结果的时候要比较一下更符合条件的数. 代码 public ArrayList<Integer> FindNumbersWithSum(int[]

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the s

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

微软架构详谈,从面试官的角度谈面试:剑指Offer名企面试官精讲典型编程题

前言 我在微软做了很多年的面试官,后面七年多作为把关面试官也面试了很多应聘者.应聘者要想做好面试,确实应把面试当作一门技巧来学习,更重要的是要提高自身的能力.我遇到很多应试者可能自身能力也不差但因为不懂得怎样回答提问,不能很好发挥.也有很多校园来的应聘者也学过数据结构和算法分析,可是到处理具体问题时不能用学过的知识来有效地解决问题.这些朋友读读海涛的这本书,会很受益,在面试中的发挥也会有很大提高.这本书也可以作为很好的教学补充资料,让学生不只学到书本知识,也学到解决问题的能力. 主页 目录 第1