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