【问题标题】:pushing object onto stack [closed]将对象推入堆栈[关闭]
【发布时间】:2013-01-26 22:07:51
【问题描述】:

我有这段代码用于将对象推入堆栈,我无法理解每一行的作用,如果有人可以解释为什么前一个节点(newNode.next)必须等于顶部,以及为什么然后制作顶部等于新节点。

void push(AnyClass newbObj)
{
  Node newNode = Node(newObj);
  newNode.next = top;
  top = newNode;
}

【问题讨论】:

标签: java stack


【解决方案1】:

这看起来像一个链表实现。在链表中,每一项都有一个指向列表中下一项的指针(引用)。

变量top 似乎是对列表开头节点的引用,因此表示堆栈的顶部。

让我们假设列表开始看起来像这样:

item 1 -> item 2 -> etc...
^----top

第一行只是将参数转换为正确的类型,我们可以改为定义 push() 以采用 Node 并完全删除这一行。

由于我们要在前面插入新节点,首先我们需要确保它指向列表的其余部分:

newNode.next = top;  //Point newNode's 'next' field to the current top of the list

这给了我们一些看起来像这样的东西

newNode -> item 1 -> item 2 -> etc...
           ^----top

top 仍然指向旧项目,所以我们现在更新:

top = newNode; //Re-assign top to point to the new head of the list

现在列表如下所示:

newNode -> item 1 -> item 2 -> etc...
^----top

我们完成了。

【讨论】:

    【解决方案2】:

    让我分步说明:

    1. newNode 是使用代码Node newNode = Node(newObj); 创建的新节点。您希望将其放在堆栈顶部(即推送)
    2. 现在,在堆栈顶部,您还有另一个名为 top 的节点。
    3. 你想把当前的top节点往下推一级
    4. 您在以下代码中将新节点链接到当前顶部节点。

      newNode.next = top

    5. 此后,您在以下代码中将新节点设为栈顶:

      top = newNode

    编辑

    有些人强调第 4 行。

    newNode.next = top 表示newNode 有一个名为 next

    这将存储前一个 Top 节点的 memory address 。 因此,如果我们想通过当前 Top 节点访问前一个顶级节点 (newNode) 我们可以通过以下方式轻松做到:

    Node prevTopNode = (Node)top.next

    【讨论】:

    • 在第 4 步中,为什么新节点是 newNode.next 呢?
    • 使节点链保持完整。就像:顶部节点持有第二个节点。第二个节点持有第三个节点。 3rd 持有 4rth 以此类推...可以可视化为 top->2nd->3rd->4rth->...->nth 节点
    【解决方案3】:

    我添加了一些 cmets,希望对您有所帮助。

    void push(AnyClass newbObj)
    {
      Node newNode = Node(newObj);  //create a new node of the stack containing the data (newbObj)
      newNode.next = top;           //the new node has thw prevois top of the stack the successor 
      top = newNode;                //the new node is now the top of the tsack
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2018-09-19
      • 2011-04-22
      • 2017-03-22
      相关资源
      最近更新 更多