1. 程式人生 > >提出一種資料結構支援push和pop操作以及第三種操作findMin,返回最小值,所有操作均以O(1)最壞時間執行

提出一種資料結構支援push和pop操作以及第三種操作findMin,返回最小值,所有操作均以O(1)最壞時間執行

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()); } }