#include <iostream>
#include <stdio.h>
#include <stack>
#include <string>
using namespace std;
/*
问题:实现一个MyQueue类,该类用两个栈来实现一个队列
分析:设两个栈分别为栈1和栈2.栈1负责压入,栈2负责弹出。
一个例子:假设压入1,2,3,然后弹出1,压入4,。模拟过程:
栈1:
3
2
1
栈2:空
然后需要弹出1,此时需要将栈1所有元素压入栈2,
此时栈1为空,栈2为
1
2
3
然后弹出1,
栈2变为:
2
3
当需要压入4时,肯定不能直接压入到栈2,因为此时顺序不对,因此只能将栈2元素都压入栈1,然后将
4也压入栈1,变成
4
3
2
总结规律:
栈1用于压入,当需要压入元素时,判断此时如果栈1为空,需要将栈2的所有元素先压入栈1,然后再压入当前元素
栈2用于弹出,当需要弹出元素时,判断此时如果栈2为空,需要将栈1的所有元素压入栈2,然后弹出栈2的栈顶元素
输入:
3(压入栈的元素个数)
1 2 3(栈中的每个元素)
2(指令个数)
pop 1(pop弹出的次数)
push 4(push压入的元素)
输出:
2 3 4(输出两个栈组成的队列中所有元素,按先后顺序)
关键:
1 栈1用于压入,当需要压入元素时,判断此时如果栈1为空,需要将栈2的所有元素先压入栈1,然后再压入当前元素
栈2用于弹出,当需要弹出元素时,判断此时如果栈2为空,需要将栈1的所有元素压入栈2,然后弹出栈2的栈顶元素
*/
class MyQ
程序员面试金典: 9.3栈与队列 3.5实现一个MyQueue类,该类用两个栈来实现一个队列
最新推荐文章于 2023-08-23 18:41:47 发布