我正在尝试以面向对象的方式编写代码。在这种特殊情况下,我想跟踪O(1)时间内我的堆栈的最小值。我知道该怎么做,它的想法,以及我对它的想法,也就是有另一个栈来记录每次推送和流行的最小值。在java中正确编写面向对象的代码堆栈
我嵌套被称为minStack程序类,它似乎并不像正确的事情,当我创建minStack的实例,但是这样做并调用它的变量内每一个类它的作品了罚款一个普通的堆栈。我创建了一个类,扩展一个堆栈称为StackWithMin,但我不知道该怎么称呼自己的价值观。我应该创建一个StackWithMin的新实例吗?如果是的话,我会怎么做呢?我做了它的主要功能上面的代码的结束,而是偷看()始终返回null
class minStack {
public class Stack {
Node top;
Object min = null;
Object pop() {
if(top != null) {
Object item = top.getData();
top = top.getNext();
return item;
}
return null;
}
void push(Object item) {
if(min == null) {
min = item;
}
if((int)item < (int)min) {
min = item;
}
Node pushed = new Node(item, top);
top = pushed;
}
Object peek() {
if(top == null) {
//System.out.println("Its null or stack is empty");
return null;
}
return top.getData();
}
Object minimumValue() {
if(min == null) {
return null;
}
return (int)min;
}
}
public class Node {
Object data;
Node next;
public Node(Object data) {
this.data = data;
this.next = null;
}
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public void setNext(Node n) {
next = n;
}
public Node getNext() {
return next;
}
public void setData(Object d) {
data = d;
}
public Object getData() {
return data;
}
}
public class StackWithMin extends Stack {
Stack s2;
public StackWithMin() {
s2 = new Stack();
}
public void push(Object value) {
if((int)value <= (int)min()) {
s2.push(value);
}
super.push(value);
}
public Object pop() {
Object value = super.pop();
if((int)value == (int)min()) {
s2.pop();
}
return value;
}
public Object min() {
if(s2.top == null) {
return null;
}
else {
return s2.peek();
}
}
}
Stack testStack = new Stack();
StackWithMin stackMin = new StackWithMin();
public static void main(String[] args) {
minStack mStack = new minStack();
//StackWithMin stackMin = new StackWithMin();
mStack.testStack.push(3);
mStack.testStack.push(5);
mStack.testStack.push(2);
mStack.stackMin.push(2);
mStack.stackMin.push(4);
mStack.stackMin.push(1);
System.out.println(mStack.testStack.peek());
System.out.println(mStack.stackMin.peek());
mStack.testStack.pop();
}
}
这就是我一直在寻找谢谢,T的相关接口,意味着我们可以与任何类型的数据类型,obstaniate它这很酷。谢啦。 – Karan