这个伪代码的输出是什么?

时间:2015-11-17 02:15:09

标签: data-structures stack

如果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);

1 个答案:

答案 0 :(得分: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