數據結構與算法(JAVA版)2_5:查詢棧中每次push或pop之後,棧中的最小值

查詢每次pop之後棧中的最小值,如對於棧3,1,2(棧頂),當pop=2時,min=1;當pop=1時,min=3;當pop=3時,min=null.

package com.inspire.chapter2;

import java.util.Stack;

public class GetMinStack {
	// 查詢每次pop之後棧中的最小值,如對於棧3,1,2(棧頂),當pop=2時,min=1;當pop=1時,min=3;當pop=3時,min=null;
	public static class MyStack1 {
		private Stack<Integer> stackData;
		private Stack<Integer> stackMin;

		public MyStack1() {
			stackData = new Stack<Integer>();
			stackMin = new Stack<Integer>();
		}

		// 返回最小棧的棧頂
		public int getMin() {
			if (stackMin.isEmpty()) {
				throw new RuntimeException("最小棧爲空");
			}
			return stackMin.peek();
		}

		public void push(int value) {
			if (stackMin.isEmpty()) {
				stackMin.push(value);
			} else if (value < getMin()) {
				stackMin.push(value);
			} else {
				stackMin.push(getMin());
			}
			stackData.push(value);
		}

		public int pop() {
			if (stackData.isEmpty()) {
				throw new RuntimeException("數據棧已空");
			}
			stackMin.pop();
			return stackData.pop();
		}
	}

	public static void main(String[] args) {
		MyStack1 stack1 = new MyStack1();
		stack1.push(1);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
		stack1.push(5);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
		stack1.push(2);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
		stack1.push(0);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
		stack1.push(0);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
		stack1.push(-1);
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());

		System.out.println("將元素" + stack1.pop() + "出棧");
		System.out.println("當前棧的最小元素爲:" + stack1.getMin());
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章