mxyx

栈与队列面试题汇总

1.设计一个有GetMin功能的栈

思路1:用两个栈,一个用来实现栈的正常操作,称为主栈;另一个用来存储最小值,每当push遇到小于等于栈顶的值就压入,每当pop弹出与栈顶元素相等的值就弹出。

思路2:用两个栈,一个用来实现栈的正常操作,称为主栈;另一个用来存储最小值,每次push就压入,新值小于栈顶元素就压入新值,否则压入栈顶元素值,每次pop都弹出。

2.由两个栈组成队列

思路:用两个栈来实现,一个栈A,一个栈B,push操作每次压入栈A,每当栈B为空,pop操作把栈A的元素一次压入栈B,peek操作时,栈B不为空直接返回栈B栈顶,否则把栈A的元素一次压入栈B,再返回栈顶。

3.仅用一个递归函数和栈操作逆序一个栈

思路:每次移除栈底元素,递归不断把栈底元素提升到栈顶

 1 #include <stack>
 2 using namespace std;
 3 int GetAndRemoveLastElem(stack<int>& s)
 4 {
 5     if (s.empty())
 6         throw "";
 7     int tmp = s.top();
 8     s.pop();
 9     if (s.empty())
10         return tmp;
11     else
12     {
13         int ret = GetAndRemoveLastElem(s);
14         s.push(tmp);
15         return ret;
16     }
17 }
18 
19 void Reverse(stack<int>& s)
20 {
21     if (s.empty())
22         return;
23     int tmp = GetAndRemoveLastElem(s);
24     Reverse(s);
25     s.push(tmp);
26 }

PS:剩下的后面再整理。

 

posted on 2018-03-03 21:34  mxyx  阅读(125)  评论(0编辑  收藏  举报

导航