【校招面试 之 剑指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){
	// 先将stack1倒到stack2中
	while(!stack1.empty()){
		stack2.push(stack1.top());
		stack1.pop();
	}

	// 然后取出stack2中的栈顶元素
	T targetNum = stack2.top();
	stack2.pop();

	// 将stack2中的元素倒回到stack1中(为了下次再做操作(入队或者出对只对stack1操作))
	while(!stack2.empty()){
		stack1.push(stack2.top());
		stack2.pop();
	}
	return targetNum;
}

// 输出
template <typename T>
void printStack1(stack<T> &stack1){
	while(!stack1.empty()){
		cout<<stack1.top()<<" ";
		stack1.pop();
	}
}
int main(){

	stack<int> stack1;
	stack<int> stack2;
	// 1.入队操作
	pushQueue(stack1, 100);
	pushQueue(stack1, 200);

	//2.出队操作
	cout<<popQueue(stack1, stack2)<<endl;
	// 3.打印验证
	pushQueue(stack1, 300);
	printStack1(stack1);
	system("pause");
	return 0;
}

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

时间: 2024-07-30 07:02:26

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

【校招面试 之 剑指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)

【校招面试 之 剑指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(书):用两个栈实现队列

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析:入栈时只入栈1,出栈为栈2:若栈2不为空,直接出栈:否则,将栈1中的值依次入栈2,之后栈2出栈 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(n

剑指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

剑指offer系列45---和为s的两个数字

[题目]输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 1 package com.exe9.offer; 2 3 /** 4 * [题目]输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 5 * //如果有多对数字的和等于S,输出两个数的乘积最小的. 6 * @author WGS 7 * 8 */ 9 public class FindTwoNumberSum { 10 11 public boolean findTwoNumEq