用两个栈实现最小栈

用两个栈实现最小栈

过程:

  • 入栈时候,栈A用于保存数据,并和栈B中的元素进行比较:
    如果入栈元 素小于栈B中的元素,将入栈元素进入栈B中
    如果入栈元素大于栈B中的元素,peek()栈B中的元素进入栈B
  • 出栈时候,栈Apop()数据,栈B也一起pop数据
  • 取最小值的时候,peek()栈B的元素就是当前栈的最小值
import java.util.Stack;

public class minStack {
	
	 // 用两个栈实现一个最小栈
	 Stack<Integer> stackA=new Stack<>();
	 Stack<Integer> stackB=new Stack<>();
	 
	 //入栈时候,栈A正常存储,栈B存储最小值
	  	//如果元素小于栈B中的元素,将元素存入栈B中
	 	//如果元素大于栈B中的元素,将栈B中的元素重复保存
	 public void push(int node) {
		 stackA.push(node);
		 if(stackB.isEmpty()||node<stackB.peek()) {
			 stackB.push(node);
		 }else {
			 stackB.push(stackB.peek());
		 }
	 }
	 
	 // 出栈的时候,保证栈定中的元素为最小值
	 // 栈A出栈,栈B就出栈
	 public void pop() {
		 if(stackA.isEmpty()) {
			 throw  new RuntimeException();
		 }
		 stackA.pop();
		 stackB.pop();
	 } 
	 
	 // 获取最小值
	 // 栈B出栈,对应着栈A也出栈
	 public Integer getMin() {
		 if(stackB.isEmpty()) {
			 throw new RuntimeException();
		 }
		 return stackB.peek();
	 }
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值