索引混乱堆栈后进先出法
indexing confusion Stack LIFO
我一直在自学 Java,并以 http://www.cs.princeton.edu/courses/archive/spr15/cos126/lectures.html 作为参考。我刚刚讨论了 Stack
的主题,他们以下面的代码为例
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class StrawStack
{
private String[] a;
private int N=0;
public StrawStack(int max)
{ a = new String[max];}
public boolean isEmpty()
{ return (N==0);}
//push a string on top of the stack
public void push(String item)
{ a[N++] = item;}
//return the last string added to the top of the stack
// this is what gets printed out in the main method
public String pop()
{ return a[--N]; }
public int size()
{ return N;}
public static void main(String[] args)
{
int max = Integer.parseInt(args[0]);
StrawStack stack = new StrawStack(max);
while (!StdIn.isEmpty())
{
String item = StdIn.readString();
if (item.equals("-"))
{ StdOut.print(stack.pop() + " ");}
else
{ stack.push(item);}
}
}
//StdOut.println();
}
使用to be or not to – be - - that - - - is
作为输入然后输出是to be not that or be
,这是有道理的,因为-
使得代码打印出最后一个字符串。我的困惑是,当它在 pop
方法中有 a[--N]
时,结果如何。我在纸上写下了输入的 to be or not to –
部分并跟踪索引。我认为它是这样的:
(a[0] stays default
a[1] = to
a[2]= be
a[3]= or
a[4]=not
a[5]=to
直到遇到-
,然后调用pop
。我的困惑是,代码以某种方式调用 pop 和 returns a[5] = to
而不是 a[4] = not
,我认为应该是这样。因为就在它遇到 -
、N = 5
之前,然后在遇到 -
之后,N
被分配 4
如果我没记错的话(我一定是)
这段代码中,N是下一个空space的索引,不是栈中最后插入的String的索引。所以当做 a[--N] 时,这确实首先减少 N,但它指向最后插入的项目,"to".
遇到第一个“-”时,堆栈如下:
a[0] = "to"
a[1] = "be"
a[2] = "or"
a[3] = "not"
a[4] = "to"
N 为 5。
我一直在自学 Java,并以 http://www.cs.princeton.edu/courses/archive/spr15/cos126/lectures.html 作为参考。我刚刚讨论了 Stack
的主题,他们以下面的代码为例
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class StrawStack
{
private String[] a;
private int N=0;
public StrawStack(int max)
{ a = new String[max];}
public boolean isEmpty()
{ return (N==0);}
//push a string on top of the stack
public void push(String item)
{ a[N++] = item;}
//return the last string added to the top of the stack
// this is what gets printed out in the main method
public String pop()
{ return a[--N]; }
public int size()
{ return N;}
public static void main(String[] args)
{
int max = Integer.parseInt(args[0]);
StrawStack stack = new StrawStack(max);
while (!StdIn.isEmpty())
{
String item = StdIn.readString();
if (item.equals("-"))
{ StdOut.print(stack.pop() + " ");}
else
{ stack.push(item);}
}
}
//StdOut.println();
}
使用to be or not to – be - - that - - - is
作为输入然后输出是to be not that or be
,这是有道理的,因为-
使得代码打印出最后一个字符串。我的困惑是,当它在 pop
方法中有 a[--N]
时,结果如何。我在纸上写下了输入的 to be or not to –
部分并跟踪索引。我认为它是这样的:
(a[0] stays default
a[1] = to
a[2]= be
a[3]= or
a[4]=not
a[5]=to
直到遇到-
,然后调用pop
。我的困惑是,代码以某种方式调用 pop 和 returns a[5] = to
而不是 a[4] = not
,我认为应该是这样。因为就在它遇到 -
、N = 5
之前,然后在遇到 -
之后,N
被分配 4
如果我没记错的话(我一定是)
这段代码中,N是下一个空space的索引,不是栈中最后插入的String的索引。所以当做 a[--N] 时,这确实首先减少 N,但它指向最后插入的项目,"to".
遇到第一个“-”时,堆栈如下:
a[0] = "to"
a[1] = "be"
a[2] = "or"
a[3] = "not"
a[4] = "to"
N 为 5。