class Node
{
object data;
Node nextNode;
}
class stack
{
Node top;
public push()
{
Node aNewNode = new Node();
aNewNode.nextNode = top;
top = aNewNode;
}
}
任何人都可以告诉我们为什么分配top = aNewNode
答案 0 :(得分:3)
因为堆栈中最后插入的节点成为第一个被检索的节点(LIFO) - 所以它是堆栈的新“顶部”。
它就像一堆卡片,你把卡片放在最上面 - 当你交易卡片时,你加入到顶部的最后一张卡片是你交易的第一张卡片。
答案 1 :(得分:1)
Beacuse堆栈是“后进先出”又称LIFO数据结构。
与小金属钉相似,您会看到食客收据。
答案 2 :(得分:0)
堆栈是一种后进先出结构。这意味着要向该堆栈添加新项目,请引用顶部项目,将其作为上一个顶部分配给新节点,然后将新节点设置为逻辑顶部。任何工作,例如枚举,添加或删除都始于头部。
答案 3 :(得分:0)
它是Stack的基本功能 - “Last IN,First OUT”。
您的堆栈顶部始终是插入的newNode。
答案 4 :(得分:0)
节点是堆栈中的元素,您的实现基于链表。
因此,要在堆栈上推送新元素,您需要创建一个新节点。然后是从新节点到上一个顶部的链接。 IE浏览器。新节点成为新的顶级。因此,分配,以便您可以跟踪顶部。
请注意,您发布的实现不需要跟踪堆栈的底部。但是,POP函数应通过检查调用应用程序是否尝试“弹出”结束null来检查这一点。
答案 5 :(得分:0)
因为堆栈是LIFO(后进先出)数据结构,所以当调用push()时,您正在创建一个新节点,它将位于顶部,因为它应该是第一个删除的节点,如果你是调用pop()。在推送时,您可以将当前顶级对象链接到新节点的nextNode属性,并将堆栈的top属性设置为新节点。
答案 6 :(得分:0)
您有一个现有的堆栈(在此处实现为链接列表),它是: B - > C - > D - > Ë 其中B位于顶部,B的nextNode是C,依此类推。
当你把东西推到堆栈上时,它就变成了新的“顶层”。所以你必须做两件事:1)使堆栈的现有顶部成为堆栈新顶部的nextNode,以及2)设置堆栈顶部堆栈的想法以引用堆栈的新顶部
答案 7 :(得分:0)
因为如果您正在实现LIFO堆栈并使用单链接列表作为底层实现,那么将新节点添加到列表的开头是
push()
和pop()
O(1)操作。否则,在堆栈中添加/删除项目需要遍历整个列表,进行push()
和pop()
O(N)操作。或者您可以使用双向链表作为堆栈的基础数据存储区,代价是更多内存(每个节点2个指针,每个节点1个指针),并使push()
和{{1的实现复杂化}}
但是,使用双向链表意味着,通过再添加2个方法,您可以从类中获得更多的多功能性:您可以使用相同的类作为堆栈,队列或某种组合。例如,Perl的数组被实现为链接列表,并提供pop()
和push
操作,用于在数组末尾添加/删除项目,以及pop
和shift
操作对数组的开头做同样的事情。要将perl数组用作堆栈,请使用unshift
/ push
;要将其用作队列,如果您愿意,可以使用pop
/ push
(或shift
/ unshift
。)