最小栈JAVA实现_java 最小栈

本文介绍了一种特殊的栈数据结构——MinMaxStack,该栈能够高效地进行元素的压入、弹出操作,并能快速获取栈内元素的最大值与最小值。通过具体的Java代码实现了这一数据结构,并展示了其在实际场景中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public interface IMinMaxStack {

public T pop();

public void push(T t);

public T getMin();

public T getMax();

public int getLength();

}

public class MinMaxStack implements IMinMaxStack {

private static int maxLength = 5;

private static int [] data= new int[maxLength];

private static int [] mins= new int[maxLength];

private static int [] maxs= new int[maxLength];

private static int size = 0;

private static int current = 0;

private static int total = 0;

private void growing(){

if (current >= maxLength / 4 * 3 ) {

maxLength = (maxLength *3)/2 + 1;

data = Arrays.copyOf(data, maxLength);

mins = Arrays.copyOf(mins, maxLength);

maxs = Arrays.copyOf(maxs, maxLength);

}

}

@Override

public Integer pop() {

total --;

if (current >= 0) {

int temp =data[current-1] ;

current --;

return temp;

}

return null;

}

@Override

public void push(Integer t) {

total ++;

growing();

data[current] = t;

if(current == 0){

mins[current] = t;

maxs[current] = t;

}else{

if (mins[current-1] >= t) {

mins[current] = t;

}else{

mins[current] = mins[current-1];

}

if (maxs[current-1] <= t) {

maxs[current] = t;

}else{

maxs[current] = maxs[current-1];

}

}

current ++;

}

@Override

public Integer getMin() {

int temp = mins[current];

return temp;

}

@Override

public Integer getMax() {

int temp = maxs[current];

return temp;

}

@Override

public int getLength() {

return total;

}

public static void main(String[] args) {

MinMaxStack ms = new MinMaxStack();

ms.push(6);

ms.push(2);

ms.push(7);

ms.push(1);

ms.push(5);

ms.push(3);

System.out.println("current\tlength\tpop\tmin\tmax");

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());

}

}

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。

谢谢您的赞助,我会做的更好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值