java - 栈和队列(读代码)

标签 java stack queue

我想解决这个问题而不将其放入 Java IDE 中。 (如果在考试中出现,我将无法解决它。)

到目前为止我所知道的。

我知道堆栈被称为 LIFO 队列简称为FIFO。但我不明白这段代码会弹出什么(或者如果我是正确的)。

 public static void main (String[] args) {
    Queue<String> q = new Queue<String> ();
    q.enqueue ("one");
    q.enqueue ("two");
    q.enqueue ("four");
    q.enqueue ("six");
    String s = "";
    int i = 0;
    while (!q.isEmpty()) {
      s = s + q.dequeue().substring(i);
      i++; 
    }
    StdOut.print (s);
  }

因为它是一个队列,所以它是 FIFO 并且子字符串将导致输出为:onewour?由于 6 的 s.substring() 将为 (3),因此不会出现任何值。

最后我在普林斯顿计算机科学课上发现了两个问题,但不知道答案是怎么来的

假设客户端执行(队列)入队和出队操作的混合序列。入队操作将整数 0 到 9 按顺序放入队列中;出队操作打印出返回值。以下哪一个序列不会发生?

(a)  0 1 2 3 4 5 6 7 8 9

(b)  4 6 8 7 5 3 2 9 0 1 

(c)  2 5 6 7 4 8 9 3 1 0

(d)  4 3 2 1 0 5 6 7 8 9

答案:(b)、(c) 和 (d)。

假设执行(堆栈)入栈和出栈操作的混合序列。压入按顺序压入整数 0 到 9;弹出窗口打印出返回值。以下哪一个序列不会发生?

(a)  4 3 2 1 0 9 8 7 6 5

(b)  4 6 8 7 5 3 2 9 0 1

(c)  2 5 6 7 4 8 9 3 1 0

(d)  4 3 2 1 0 5 6 7 8 9

(e)  1 2 3 4 5 6 9 8 7 0

(f)  0 4 6 5 3 8 1 7 2 9

(g)  1 4 7 9 8 6 5 3 0 2

(h)  2 1 4 3 6 5 8 7 9 0

答案:(b)、(f) 和 (g)。

最佳答案

问题3)

看b)

4 6 8 7 5 3 2 9 0 1

当它弹出并打印 9 时,意味着此时所有推送操作已完成
(由于推送的顺序为 0,1,...,9)。好的,现在读数为 9。然后读数为 0,
这意味着它正在读取第一个被插入堆栈的数字。
那么它就不可能弹出并打印 1,因为它已经弹出了最后一个
可能的数字(在弹出 0 后不可能将 1 压入,因为如上所述
所有压入操作均在弹出 9 时完成)。

您需要使用类似的逻辑观察来了解为什么 f) 和 g) 也不可能。
当阅读所有这些弹出数字序列时,请尝试想象该序列
在弹出之间发生的推送(即自上次弹出以来推送的内容)。
无论哪种爆裂序列都会导致打嗝:这种情况是不可能的,即不可能发生。

问题2) 这是微不足道的,除了 a) 之外任何事情都是不可能的。对吗?
因为就像在商店里排队一样,顾客是在
他们来到收银台的顺序。不然就不会排队了。

问题1) 如果您实际输入、编译并运行它,您将了解更多信息。

关于java - 栈和队列(读代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303424/

相关文章:

java - Selenium 如何检查下拉列表项是否被选中

arrays - 给定数组 A,计算 B s.t B[i] 存储距离 A[i] 左侧最近的小于 A[i] 的元素

assembly - 调用 printf 可以防止段错误

Java包: What is the difference between `oracle.AQ` and `oracle.jdbc.aq` ?

jquery - 将 jQuery Delay() 与单独的元素一起使用

C++ 使用 STL : Stack and Queue

java - 无法编译 Parquet 工具

java - Jersey 全局异常处理程序不起作用

java - 我如何使用peak_detection函数 - Android studio

assembly - 在汇编代码中,.cfi 指令如何工作?