You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.3 KiB
106 lines
2.3 KiB
2 years ago
|
package class03;
|
||
|
|
||
|
import java.util.Stack;
|
||
|
|
||
|
public class Code05_GetMinStack {
|
||
|
|
||
|
public static class MyStack1 {
|
||
|
private Stack<Integer> stackData;
|
||
|
private Stack<Integer> stackMin;
|
||
|
|
||
|
public MyStack1() {
|
||
|
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);
|
||
|
}
|
||
|
this.stackData.push(newNum);
|
||
|
}
|
||
|
|
||
|
public int pop() {
|
||
|
if (this.stackData.isEmpty()) {
|
||
|
throw new RuntimeException("Your stack is empty.");
|
||
|
}
|
||
|
int value = this.stackData.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);
|
||
|
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("=============");
|
||
|
|
||
|
MyStack1 stack2 = new MyStack1();
|
||
|
stack2.push(3);
|
||
|
System.out.println(stack2.getmin());
|
||
|
stack2.push(4);
|
||
|
System.out.println(stack2.getmin());
|
||
|
stack2.push(1);
|
||
|
System.out.println(stack2.getmin());
|
||
|
System.out.println(stack2.pop());
|
||
|
System.out.println(stack2.getmin());
|
||
|
}
|
||
|
|
||
|
}
|