List 头尾
这将导致我最终得到以下线性列表: X C 但是,作为一个数组,它看起来如何?它是stack={X,C}还是stack={C,X} 据我所知,它应该是X,C,因为堆栈的顶部是头部,其他所有东西都是底部(尾部),所以在这种情况下,C必须是尾部,X是头部,给我们X,C。然而,在我刚刚接受这个之前,我只是认为获得某人的第二个意见是明智的,谢谢List 头尾,list,stack,List,Stack,这将导致我最终得到以下线性列表: X C 但是,作为一个数组,它看起来如何?它是stack={X,C}还是stack={C,X} 据我所知,它应该是X,C,因为堆栈的顶部是头部,其他所有东西都是底部(尾部),所以在这种情况下,C必须是尾部,X是头部,给我们X,C。然而,在我刚刚接受这个之前,我只是认为获得某人的第二个意见是明智的,谢谢 编辑:我刚刚记得堆栈是后进先出(后进先出)结构。。。这让事情变得更复杂了。如果“中的最后一个”是首先被删除的第一个,那么根据该逻辑,数组将看起来像C,X,不是吗?
编辑:我刚刚记得堆栈是后进先出(后进先出)结构。。。这让事情变得更复杂了。如果“中的最后一个”是首先被删除的第一个,那么根据该逻辑,数组将看起来像C,X,不是吗?由于X是最后添加到堆栈的..它可以是。这将是堆栈的一个实现细节。您甚至可以使用一个链表来实现它,而不需要任何数组。也可以。这将是堆栈的一个实现细节。您甚至可以使用链表实现它,而不使用数组。实现它的一种方法是在向量的末尾添加新条目,并在弹出时从末尾删除它们:
Push(A)
Push(B)
Pop
Pop
Push(C)
Push(A)
Pop
Push(X)
推动(B)
流行音乐
流行音乐
推动(C)
推(A)
流行音乐
推(X)
在
向量的末尾添加和删除通常非常有效。一种实现方法是在向量的末尾添加新条目,并在弹出时从末尾删除它们:
Push(A)
Push(B)
Pop
Pop
Push(C)
Push(A)
Pop
Push(X)
推动(B)
流行音乐
流行音乐
推动(C)
推(A)
流行音乐
推(X)
在向量的末尾添加和删除通常是非常有效的。让我们看看堆栈在每一步上的外观,并尝试可视化数组的外观。为了方便起见,数组的第一个条目将是最左边的条目
[C] [X] [] [] [] [] []
请注意,以这种方式在阵列上实现堆栈有点复杂,因为您需要将阵列中已存储的所有以前的项移动一个位置(对于每个推
,向右移动;对于每个弹出
,向左移动)
我使用的一个“经验法则”是:堆栈中的第一项始终是将弹出的项。在数组中,第一项的索引为0
(或1,取决于您使用的语言)
如果跟踪最后一个条目的索引,那么事情可能会更容易:
Push(A) --> [A]
Push(B) --> [B, A]
Pop --> [A]
Pop --> []
Push(C) --> [C]
Push(A) --> [A, C]
Pop --> [C]
Push(X) --> [X, C]
这是一个更简单的方法。。。取舍是您需要将lastIndex
存储在某个地方。让我们看看堆栈在每个步骤上的外观,并尝试将数组的外观可视化。为了方便起见,数组的第一个条目将是最左边的条目
[C] [X] [] [] [] [] []
请注意,以这种方式在阵列上实现堆栈有点复杂,因为您需要将阵列中已存储的所有以前的项移动一个位置(对于每个推
,向右移动;对于每个弹出
,向左移动)
我使用的一个“经验法则”是:堆栈中的第一项始终是将弹出的项。在数组中,第一项的索引为0
(或1,取决于您使用的语言)
如果跟踪最后一个条目的索引,那么事情可能会更容易:
Push(A) --> [A]
Push(B) --> [B, A]
Pop --> [A]
Pop --> []
Push(C) --> [C]
Push(A) --> [A, C]
Pop --> [C]
Push(X) --> [X, C]
这是一个更简单的方法。。。取舍是你需要把lastIndex
保存在某个地方。Hm我明白了,我只是担心考试中出现这种情况的可能性,这迫使我在X、C或C之间进行选择,X@JimmyK如果你担心的话,我会和你的老师谈谈,看看他们怎么说。我希望他们足够聪明,意识到任何一个答案都是可以接受的,但我知道有时情况并非如此。嗯,我明白了,我只是担心考试中出现这种情况的可能性,这迫使我在X、C或C之间做出选择,X@JimmyK如果你担心的话,我会和你的老师谈谈,看看他们怎么说。我希望他们足够聪明,认识到任何一个答案都是可以接受的,但我知道有时情况并非如此。
[C] [] [] [] [] [] []
[C] [A] [] [] [] [] []
[C] [] [] [] [] [] []
[C] [X] [] [] [] [] []
Push(A) --> [A]
Push(B) --> [B, A]
Pop --> [A]
Pop --> []
Push(C) --> [C]
Push(A) --> [A, C]
Pop --> [C]
Push(X) --> [X, C]
Push(A) --> [A] (lastIndex = 0)
Push(B) --> [A, B] (lastIndex = 1)
Pop --> [A] (lastIndex = 0)
Pop --> [] (lastIndex = -1) # Empty stack
Push(C) --> [C] (lastIndex = 0)
Push(A) --> [C, A] (lastIndex = 1)
Pop --> [C] (lastIndex = 0)
Push(X) --> [C, X] (lastIndex = 1)