算法 (六)自定义栈获取栈元素最小值(getMin)、队列模拟栈、栈模拟队列

1、自定义栈获取栈元素最小值(getMin)

1.1 简单描述

自定义一个栈的元素,实现获得最小元素的方法:getMin

1.2 思路:
  1. 调用两个Java栈集合,一个数据栈dataStack,一个辅助栈helpStack
  2. 压栈操作:同时压入,data栈正常压入,help栈:
    a:如果没有元素,就压入新元素
    b:如果有元素,小于help栈顶元素,就压入新元素
    c:如果大于或者等于help栈顶元素,就重复压入栈顶元素
    始终保持help栈顶元素是data栈里面的最小元素
  3. 弹栈操作:一起弹
  4. 获取最小值:获取help栈的栈顶元素
1.3 具体实现代码:
package cn.nupt.sort;

import java.util.Stack;

public class Stack_getMin {
   
   

	/**
	 * @Description: 自定义栈,实现getMin,即找到栈中最小值的方法
	 *
	 * @author PizAn
	 * @date 2019年1月27日 上午11:45:48
	 * 
	 */
	public static class MyStack {
   
   

		// 注:如果你自定义的类的名字和你所引用的相同,那么会强制带上前缀
		// 比如这里的类名如果也是Stack,下面就不能再引用java.util.Stack;需要加上前缀

		// 1、建立两个栈(用Java自带的栈集合)一个是dataStack,一个是helpStack

		private Stack<Integer> dataStack;
		private Stack<Integer> helpStack;

		public MyStack() {
   
   
			this.dataStack = new Stack<Integer>();
			this.helpStack = new Stack<Integer>();

		}

		// 压栈
		public void push(Integer obj) {
   
   
			// data栈直接压
			dataStack.push(obj);
			// help栈需要判断一下,如果栈里没有数,就把第一个数压入,如果data栈里面新来的数比help栈顶(即最小的数)小,就压入
			// 如果大于或者等于,就重复压入相同的数

			if (helpStack.isEmpty()) {
   
    // 如果,help栈为空,直接将新数放进去
				helpStack.push(obj);
			} else if (obj >= helpStack.peek()) {
   
    // help栈不为空,且新数大于等于help栈的栈顶元素,重复压入栈顶元素
				helpStack.push(helpStack.peek());
			} else {
   
    // 新数小于栈顶元素,压入新数(始终保持help栈里面是data栈中最小的元素)
				helpStack.push(obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值