2015-11-17 65 views
0

如果C是一個堆棧,我想知道System.out.println(str);的輸出是什麼。這個僞代碼的輸出是什麼?

我認爲System.out.println(str);命令會輸出Harry,但我想確認,因爲我不完全理解.remove()命令。當我將這個僞代碼轉換爲Java時,它不會識別.remove()命令,除非我通過一個整數,例如.remove(2)。所以我不確定在這種情況下,如果.remove()是一個無效的命令,或者它是一個適當的堆棧方法。我的研究似乎表明,沒有適用於堆棧的.remove()方法。

所以我的問題是,如果C是一個堆棧,System.out.println(str);的輸出是什麼?

public interface Container<T> 
{ 
void insert(T x); // insert x into Container 
    T remove();  // remove item from Container 
} 

public class C<T> implements Container<T> 
{ 
public C() { /* constructor */ } 
public void insert(T x) { /* insert x into C */ } 
public T remove() { /* remove item from C */ } 
//.. other methods 
} 

Here is a program segment that uses class C above: 

Container<String> words = new C<String>(); 
String w1 = "Tom"; 
String w2 = "Dick"; 
String w3 = "Harry"; 
String w4 = "Moe"; 
words.insert(w1); 
words.insert(w2); 
words.insert(w3); 
words.insert(w4); 
String str = words.remove(); // remove 
str = words.remove();  // remove again 
System.out.println(str); 
+0

爲什麼向下票呢? –

+0

可能是因爲有大量的堆棧實現可以從中看到正確的行爲。你似乎正在使用一個基於JVM的應用程序,它只有這樣一個[實現](http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html) – paulpdaniels

回答

1

如果C是一個普通的堆棧(和它的正確編碼),那麼它是一個LIFO(後進先出)的容器。

這意味着事情會向你把他們。相反的順序

所以第一remove會給你Moe,第二會給你Harry出來。

的全部細節:

operation  stack (top,...,bottom) str 
---------  ---------------------- --- 
initial state <empty> 
push tom  tom 
push dick  dick, tom 
push harry  harry, dick, tom 
push moe  moe, harry, dick, tom 
pop str   harry, dick, tom   moe 
pop str   dick, tom    harry