栈(JAVA)

来源:互联网 发布:linux centos 编辑:程序博客网 时间:2024/06/07 01:33

使用内置的栈实现O(1)计算栈的最小元素,即使用一个栈记录栈元素,一个栈记录当前栈的最小元素,以空间换时间

import java.util.Stack;/** * 栈 * @author yinming.yu * */public class Main {public static void main(String[] args) {// TODO Auto-generated method stubMyStack stack = new MyStack();int[] a = {9, 2, 1, 10, -59};for(int item : a){stack.push(item);System.out.println("当前入栈元素 "+item+" 该元素入栈后,栈内最小元素为 "+stack.min.peek());}while(!stack.isEmpty()){int top = stack.pop();System.out.println("当前出栈元素 "+top+" 该元素出栈后,栈内最小元素为 "+(stack.isEmpty()?"栈已空,没有最小值了":stack.min.peek()));}/** * 输出结果: *  当前入栈元素 9 该元素入栈后,栈内最小元素为 9当前入栈元素 2 该元素入栈后,栈内最小元素为 2当前入栈元素 1 该元素入栈后,栈内最小元素为 1当前入栈元素 10 该元素入栈后,栈内最小元素为 1当前入栈元素 -59 该元素入栈后,栈内最小元素为 -59当前出栈元素 -59 该元素出栈后,栈内最小元素为 1当前出栈元素 10 该元素出栈后,栈内最小元素为 1当前出栈元素 1 该元素出栈后,栈内最小元素为 2当前出栈元素 2 该元素出栈后,栈内最小元素为 9当前出栈元素 9 该元素出栈后,栈内最小元素为 栈已空,没有最小值了 */}}/** * 使用O(1)求栈中的最小元素 *  * */class MyStack{Stack<Integer> element = new Stack<Integer>();//存放元素Stack<Integer> min = new Stack<Integer>();//存放栈中当前最小元素//如果当前入栈元素可以成为最小值,那么同时入栈最小值栈public void push(Integer item){element.push(item);//如果当前入栈元素小于或等于当前最小元素,那么就入min栈if(min.isEmpty()){min.push(item);}else{if(item <= min.peek()){min.push(item);}}}public Integer pop(){int top = element.pop();//如果当前最小值出栈,min栈保存的最小值也要出战,2这最小值保持一致if(top == min.peek()){//min也需要出栈min.pop();}return top;}public boolean isEmpty(){return element.isEmpty();}}