《剑指offer—面试题30:包含main函数的栈》

《剑指offer—面试题30:包含main函数的栈》
注明:仅个人学习笔记

import java.util.Stack;

public class FindStackMin30
{

Stack<Integer> dataStack = new Stack<Integer>();
Stack<Integer> minStack = new Stack<Integer>();// 辅助栈的栈顶元素时刻都是当前数据栈中的最小元素

public void push(int node)
{
    dataStack.push(node);// 数据栈压入元素

    if (minStack.isEmpty())// 如果当前辅助栈中无元素,当前元素直接压入
        minStack.push(node);
    else
    {
        if (node <= minStack.peek())// 如果当前辅助栈中有元素,且当前待压入节元素小于辅助栈栈顶元素,那就直接压入
            minStack.push(node);
        else
            minStack.push(minStack.peek());// 否则,再次压入辅助栈的当前栈顶元素
    }
}

public void pop()
{
    if (dataStack.isEmpty() == true && minStack.isEmpty() == true)
    {
        System.out.println("栈中以无元素,无法执行pop操作");
        return;
    }

    dataStack.pop();
    minStack.pop();
}

public int top()
{
    if (dataStack.isEmpty() == true && minStack.isEmpty() == true)
    {
        System.out.println("栈中以无元素,当前栈不存栈顶元素");
        return Integer.MIN_VALUE;
    }
    return dataStack.peek();
}

public int min()
{
    if (dataStack.isEmpty() == true && minStack.isEmpty() == true)
    {
        System.out.println("栈中以无元素,当前栈不存在最小值");
        return Integer.MIN_VALUE;
    }
    return minStack.peek();// 辅助栈栈顶元素,总为当前数据栈中最小元素
}

public static void main(String[] args)
{
    FindStackMin30 stack = new FindStackMin30();

    stack.push(3);
    System.out.println("-------------数据栈中当前元素是,3---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.push(4);
    System.out.println("-------------数据栈中当前元素是,3,4---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.push(2);
    System.out.println("-------------数据栈中当前元素是,3,4,2---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.push(1);
    System.out.println("-------------数据栈中当前元素是,3,4,2,1---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.pop();
    System.out.println("-------------数据栈中当前元素是,3,4,2---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.pop();
    System.out.println("-------------数据栈中当前元素是,3,4---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.push(0);
    System.out.println("-------------数据栈中当前元素是,3,4,0---------------");
    System.out.println("当前栈中最小元是" + stack.min());
    System.out.println();

    stack.pop();
    stack.pop();
    stack.pop();
    stack.pop();

    stack.top();
    stack.min();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值