用两个栈实现最小栈的功能

用两个栈实现最小栈的功能(取栈中最小数):

        package com.neusoft.data.structure;

import java.util.Stack;

/**
 * 用两个栈实现最小栈的功能
 * @author Administrator
 */
public class MyStack1 {
    /**
     * 数据栈
     */
    private Stack<Integer> stackData;
    /**
     * 最小栈
     */
    private Stack<Integer> stackMin;
    public MyStack1(){
        this.stackData=new Stack<Integer>();
        this.stackMin=new Stack<Integer>();

    }
    public int pop(){
        if(this.stackData.isEmpty()){
            System.out.println("你的栈是空的");
        }
        int value=this.stackData.pop();
        //同步一下,data栈已经移走了,且是最小,那么最小栈也应该移走最小的
        if(value==this.getmin()){
            this.stackMin.pop();
        }
        return value;
    }
    public void push(int newNum){
        //如果为空
        if(this.stackMin.isEmpty()){
            //压栈
            this.stackMin.push(newNum);
            //如果不为空,则比较newNum和stackMin的栈顶元素中哪个更小
        }else if(newNum<this.getmin()){
            //如果newNum更小或者两者相等,则newNum也压入stackMin。
            this.stackMin.push(newNum);
        }
        this.stackData.push(newNum);
    }
    public int getmin(){
        if(this.stackMin.isEmpty()){
            System.out.println("你的栈是空的");
        }
        //返回栈顶的元素
        return this.stackMin.peek();
    }
    public static void main(String[] args) {
        MyStack1 stack1 = new MyStack1();
        //压入的是数据栈和最小栈
        stack1.push(3);
        //返回的是最小栈栈顶
        System.out.println("第一次输出最小:"+stack1.getmin());
        //压入的是数据栈和最小栈
        stack1.push(4);
        //返回的是最小栈栈顶
        System.out.println("第二次输出最小:"+stack1.getmin());
        stack1.push(1);
        System.out.println("第三次输出最小:"+stack1.getmin());
        //移走数据栈,如果移走的和最小栈栈顶元素相同,最小栈也移走,返回移走的值
        System.out.println("经过弹出,弹出此时最小值:"+stack1.pop());
        //现在的栈情况,最上面是1
        System.out.println("弹出后,现在栈顶的值:"+stack1.getmin());
        System.out.println("=============");

    }

}


      

输出:

v2-7511ee7f46b1d242d10208b2db1f0a07_b.png

发布了158 篇原创文章 · 获赞 18 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/yunfengfengfeng/article/details/105485753