此Repositories主要参考左程云老师《程序员代码面试指南--IT名企算法与数据结构题目最优解》一书进行学习并实现相关例题
提供两种思路:
思路一:
创建两个栈,stackData保存元数据,stackMin保存最小元素,入栈时,判断入栈元素newNum比stackMin栈顶元素是否小,小的话将newNum压入stackMin,否则只将newNum压入stackData
弹出时,先弹出stackData中的元素,然后判断stackData中的元素是否和stackMin的栈顶元素相同,相同的话两个栈同时弹出,否则只弹出stackData元素
思路二:
创建两个栈,stackData保存元数据,stackMin保存最小元素,入栈时,如果入栈元素newNum比stackMin栈顶元素小,则将newNum同时入stackData和stackMin,如果入栈元素newNum比stackMin栈顶元素大,需要将stackMin栈顶元素再次入stackMin栈,类似填充效果
出栈时候,两个栈同时pop元素
思路:
可以将两个栈的顺序反过来,即可实现先进先出效果;具体使用两个栈,一个栈作为压入栈stackPush,仅压入数据,另一个栈作为弹出栈stackPop,仅弹出数据, 弹出栈stackPop需要将压入栈stackPush的元素压入自己的栈中,保证顺序
但是必须做到两点:
-
如果stackPush要往stackPop压入数据,必须一次性将stackPush中的元素全部压入stackPop
-
如果stackPop不为空,stackPush绝对不能向stackPop中压入数据
思路:
将栈stack的栈底元素返回并移除
逆序一个栈