【问题标题】:Linked Lists in LuaLua 中的链表
【发布时间】:2013-08-06 13:48:44
【问题描述】:

我最近一直在 Lua 中查找链接列表,并有一个快速的问题,到目前为止我还没有找到答案

local head = nil

head = {next = head, value = "d"}
head = {next = head, value = "c"}
head = {next = head, value = "b"}
head = {next = head, value = "a"}

local entry = head

while entry do
  print(entry.value)

  entry = entry.next
end

这将最终打印出“a,b,c,d”。我理解为什么它会向后打印,因为第一个可用的“节点”将是最后一个创建的节点(值 = a)。我的问题是为什么在最后一个之前创建的'head'仍然存在并且没有简单地在内存中被覆盖。

【问题讨论】:

    标签: lua linked-list lua-table


    【解决方案1】:

    “在内存中覆盖”是什么意思?您所做的任何事情都不会导致这种情况发生。

    让我们一步一步来看看你在做什么。

    local head = nil
    

    现在存在一个名为 head 的局部变量。它的值是nil

    head = {next = head, value = "d"}
    

    让我们将其分解为此处的操作序列。这相当于以下内容:

    do
      local temp = {}
      temp.next = head  --This is still `nil`
      temp.value = "d"
      head = temp
    end
    

    您构建的每个表都是唯一的值。所以让我们将第一个表称为table-d。它被构造并存储在临时变量temp 中。该表的next 值为nil。它得到一个value"d"。并将结果存储在局部变量head中。

    所以现在head 的值是table-d。下一步:

    head = {next = head, value = "c"}
    

    同样的事情:

    do
      local temp = {}
      temp.next = head  --Not nil anymore.
      temp.value = "c"
      head = temp
    end
    

    好的,我们创建一个新表。为了清楚起见,我们将此表称为table-c

    我们将其存储在temp。然后我们将它的next 字段设置为head 中的值。该值为table-d。我们将value 字段设置为"c"。然后将table-c存入head

    table-c 表如下所示:

    {
      next = { value = "d" }
      value = "c"
    }
    

    即存储在head中的表。

    这样继续下去。那么什么地方会被“覆盖”呢?

    【讨论】:

    • 感谢这完全澄清的事情。我忘了head 只会充当指向表的指针。
    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 2015-04-30
    • 2017-03-02
    • 1970-01-01
    • 2015-12-14
    • 2011-10-12
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多