1.带有最小功能的stack
空间复杂度O(n),时间复杂度O(1)
2.两个stack实现queue(进,出,清空)
stack1 负责进,stack2 负责出
若stack2 没数据,stack1导入到stack2
3.两个queue实现stack(一直不能理解存在的意义)
----- ++++
queue1负责进(顺序为1,2,3,4),结构为4321,现在要出4,但是只能顺序出1,2,3,4,;1,2,3需要存起来,放到queue2中
queue2结构为321,现在要出3;1,2需要存起来,放到queue1中
。。。。
4. 仅使用递归和栈操作,逆序栈
1234->4321;
分析:数据流程表明,必须拿到1,然后栈变成432,然后插入1
拿到1,栈变成了432 等价于 拿到1,栈变成234
即我们要解决的问题是如何拿到栈底元素的问题
1)如何拿到栈底元素(使用递归)
分析:1234,首先只能拿到4,剩下123(可以递归拿到1,剩余23),插入4
int get_deep_stack(stack<int>& m_stack) {
assert(m_stack.empty());
int val=m_stack.top();
m_stack.pop();
if(m_stack.empty()){
return val;
}
else{
int val2=get_deep_stack(m_stack);
m_stack.push(val);
return val2;
}
}
////////////
‘void reverse_stack(stack<int>& m_stack)
{
assert(m_stack.empty());
int val=get_deep_stack (m_stack);
reverse_stack(m_stack);
m_stack.push(val);
}