public class MyStack1 {
private int[] data;//用于支持push和pop操作的数组
private int[] minData;//用于支持findMin操作的数组,存储一个最小值序列
private int dataIndex;//data数组的下标索引
private int minIndex;//minData数组的下标索引
private int min;//最小值
private int size;//元素的个数
//在构造函数中进行初始化
public MyStack1(int length){
data=new int[length];
minData=new int[length];
dataIndex=-1;
minIndex=-1;
min=0;
size=0;
}
//判断数组是否为空
public boolean isEmpty(){
return size==0;
}
//入栈
public void push(int x){
size++;
data[++dataIndex]=x;
if(dataIndex==0||data[dataIndex]<=min){
min=data[dataIndex];
minData[++minIndex]=data[dataIndex];
}
}
//出栈,最小值发生改变
public int pop(){
size--;
int a=data[dataIndex--];
if((a==minData[minIndex])&&dataIndex>=0){
min=minData[--minIndex];
}
return a;
}
//找出数据结构中的最小值
public int findMin(){
return minData[minIndex];
}
public static void main(String[] args) {
MyStack1 myStack1=new MyStack1(10);
int[] a={2,-4,-5,4,-100,7,-2,-9,-3};
for (int i = 0; i <a.length; i++) {
myStack1.push(a[i]);
}
// while(!myStack1.isEmpty()){
// System.out.print(myStack1.pop()+" ");
// }
// System.out.println(myStack1.findMin());
for (int j = 0; j <5; j++) {
myStack1.pop();
}
System.out.println(myStack1.findMin());
}
}
提出一种数据结构支持push和pop操作以及第三种操作findMin,返回最小值,所有操作均以O(1)最坏时间运行
最新推荐文章于 2022-02-21 16:40:33 发布