(一)栈和队列--设计一个有getMin功能的栈 java实现

来源:互联网 发布:php社交网站 编辑:程序博客网 时间:2024/05/17 04:27

题目:

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

要求:

1、pop、push、getMin操作的时间复杂度都是O(1) 
2、设计的栈类型可以输用现成的栈结构


代码:

package chapter_1_stackandqueue;import java.util.Stack;public class problem01 {public static class MyStack1 {private Stack<Integer> stackDate;private Stack<Integer> stackMin;public MyStack1(){this.stackDate = new Stack<Integer>();this.stackMin = new Stack<Integer>();}public void push(int newNum) {if (this.stackMin.isEmpty()) {this.stackMin.push(newNum);}else if (newNum <= this.getmin()) {this.stackMin.push(newNum);}this.stackDate.push(newNum);}public int pop() {if (this.stackDate.isEmpty()) {throw new RuntimeException("Your stack is empty");}int value = this.stackDate.pop();if (value == this.getmin()) {this.stackMin.pop();}return value;}public int getmin() {if (this.stackMin.isEmpty()) {throw new RuntimeException("Your stack is empty");}return this.stackMin.peek();//查看栈顶对象而不移除它}}public static class MyStack2 {private Stack<Integer> stackData;private Stack<Integer> stackMin;public MyStack2() {this.stackData = new Stack<Integer>();this.stackMin = new Stack<Integer>();}public void push(int newNum) {if (this.stackMin.isEmpty()) {this.stackMin.push(newNum);}else if(newNum <= this.getMin()) {this.stackMin.push(newNum);}else {int newMin = this.stackMin.peek();this.stackMin.push(newMin);}this.stackData.push(newNum);}public int pop() {if (this.stackData.isEmpty()) {throw new RuntimeException("Your stack is empty");}this.stackMin.pop();return this.stackData.pop();}public int getMin() {if (this.stackMin.isEmpty()) {throw new RuntimeException("Your stack is empty");}return this.stackMin.peek();}}public static void main(String[] args) {MyStack1 stack1 = new MyStack1();stack1.push(3);System.out.println(stack1.getmin());stack1.push(4);stack1.push(5);stack1.push(1);System.out.println(stack1.getmin());System.out.println(stack1.pop());System.out.println(stack1.getmin());System.out.println("---------------");MyStack2 stack2 = new MyStack2();stack2.push(3);System.out.println(stack2.getMin());stack2.push(4);stack2.push(5);stack2.push(1);System.out.println(stack2.getMin());System.out.println(stack2.pop());System.out.println(stack2.getMin());}}