用JAVA代码实现出栈入栈并获取栈中最小值的程序

来源:互联网 发布:中文版电路仿真软件 编辑:程序博客网 时间:2024/06/05 09:18

【前言】

言归正传,昨晚看到一个有关出栈入栈并获取栈中最小值的案例,机会难得,用java代码实现了下。

要求:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法

package stacktest;import java.util.Stack;public class Test {/** * @param args */public static void main(String[] args) {Stack<Integer> stack = new Stack<Integer>();Stack<Integer> stackBackUp = new Stack<Integer>();pushStack(stack,stackBackUp,10);pushStack(stack,stackBackUp,7);pushStack(stack,stackBackUp,6);pushStack(stack,stackBackUp,4);pushStack(stack,stackBackUp,8);pushStack(stack,stackBackUp,3);pushStack(stack,stackBackUp,1);pushStack(stack,stackBackUp,2);System.out.println("当前stack:"+stack);System.out.println("stack下标对应的栈:"+stackBackUp);popStack(stack,stackBackUp);System.out.println("第1次移除操作后stack:"+stack);System.out.println("第1次移除操作后stack下标对应的栈:"+stackBackUp);popStack(stack,stackBackUp);System.out.println("第2次移除操作后stack:"+stack);System.out.println("第2次移除操作后stack下标对应的栈:"+stackBackUp);popStack(stack,stackBackUp);System.out.println("第3次移除操作后stack:"+stack);System.out.println("第3次移除操作后stack下标对应的栈:"+stackBackUp);System.out.println("stack中最小值:"+getMin(stack,stackBackUp));}/** * /** * 先进栈: * 1:创建2个栈,一个栈放元素(stack),另外一个栈放元素下标(stakcBackUp) * 2:向stack中放入元素时,先与stakcBackUp顶部元素(代表stack下标)所对应的stack元素比较 *  * * @param stack * @param stackBackUp * @param i */public static void pushStack(Stack<Integer> stack,Stack<Integer> stackBackUp,int i){if(stack.isEmpty()){//第一次放进去的值默认最小stack.push(i);stackBackUp.push(0);}else if(stack.get(stackBackUp.peek())<i){stack.push(i);}else{stack.push(i);stackBackUp.push(stack.size()-1);}}/** * 出栈操作 * 先明确:栈的原则(是一种先进后出的集合) * 当从stack中出栈时,先与stackBackUp栈顶元素对应的值进行比较,若相同则说明此时 * stack出战的为最小值,同时将stackBackUp栈顶元素移除 * 反之仅移除stack,stackBackUp不动 */public static void popStack(Stack<Integer> stack,Stack<Integer> stackBackUp){if(stack.peek()==stack.get(stackBackUp.peek())){//System.out.println(11);stackBackUp.pop();stack.pop();}else{stack.pop();}}/** * 3:总结stackBackUp最上面的下标对应的stack中的元素最小 * @param stack * @param stackBackUp * @return */public static int getMin(Stack<Integer> stack,Stack<Integer> stackBackUp){return stack.get(stackBackUp.peek());}}
运行结果:

当前stack:[10, 7, 6, 4, 8, 3, 1, 2]stack下标对应的栈:[0, 1, 2, 3, 5, 6]第1次移除操作后stack:[10, 7, 6, 4, 8, 3, 1]第1次移除操作后stack下标对应的栈:[0, 1, 2, 3, 5, 6]第2次移除操作后stack:[10, 7, 6, 4, 8, 3]第2次移除操作后stack下标对应的栈:[0, 1, 2, 3, 5]第3次移除操作后stack:[10, 7, 6, 4, 8]第3次移除操作后stack下标对应的栈:[0, 1, 2, 3]stack中最小值:4
入栈演示:



0 0
原创粉丝点击