我正在嘗試以面向對象的方式編寫代碼。在這種特殊情況下,我想跟蹤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