提出一種資料結構支援push和pop操作以及第三種操作findMin,返回最小值,所有操作均以O(1)最壞時間執行
阿新 • • 發佈:2019-02-12
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());
}
}