Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 头尾_List_Stack - Fatal编程技术网

List 头尾

List 头尾,list,stack,List,Stack,这将导致我最终得到以下线性列表: X C 但是,作为一个数组,它看起来如何?它是stack={X,C}还是stack={C,X} 据我所知,它应该是X,C,因为堆栈的顶部是头部,其他所有东西都是底部(尾部),所以在这种情况下,C必须是尾部,X是头部,给我们X,C。然而,在我刚刚接受这个之前,我只是认为获得某人的第二个意见是明智的,谢谢 编辑:我刚刚记得堆栈是后进先出(后进先出)结构。。。这让事情变得更复杂了。如果“中的最后一个”是首先被删除的第一个,那么根据该逻辑,数组将看起来像C,X,不是吗?

这将导致我最终得到以下线性列表:

X

C

但是,作为一个数组,它看起来如何?它是stack={X,C}还是stack={C,X}

据我所知,它应该是X,C,因为堆栈的顶部是头部,其他所有东西都是底部(尾部),所以在这种情况下,C必须是尾部,X是头部,给我们X,C。然而,在我刚刚接受这个之前,我只是认为获得某人的第二个意见是明智的,谢谢


编辑:我刚刚记得堆栈是后进先出(后进先出)结构。。。这让事情变得更复杂了。如果“中的最后一个”是首先被删除的第一个,那么根据该逻辑,数组将看起来像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)