这个用Lua实现的链表示例如何工作?
2013-3-29 20:51:21
收藏:0
阅读:116
评论:2
我正在重新学习编程,经过多年,目前专注于C#和Lua。我在Lua的书中看到了一个关于链接列表的例子,但是我很难理解它到底是如何工作的。
list = nil
for line in io.lines() do
list = {next = list, value = line}
end
如果我理解得对的话
- 它正在创建一个新表
- 将列表分配给该表,将“下一个”键/标识符(正确术语?)设置为指向列表(在第一个创建的表时仍为nil)
- 然后将“值”键/标识符设置为读入的任何内容
- 然后“列表”现在实际上指向新创建的表
然后在下一次循环运行时
- 创建下一个表
- 将“next”键/标识符设置为指向列表(现在指向先前创建的表)
- 然后将“值”键/标识符设置为读入的任何内容
- 然后“列表”现在实际上指向新创建的表...再次
我只是想确保我完全理解了它是如何工作的,因为它似乎有点奇怪/奇怪,即列表正在创建一个表并指向它当前指向的任何内容,只是在行执行完成之前。更新列表以指向最新创建的表。
或者我完全错了?
点赞
用户7022315
基本上发生了什么是,在一个循环内,你正在创建一个新的表,并且next键一开始是空的。在随后的循环中,你又再次创建一个表,然后将list变量赋值给next键,它现在是对前一个表的引用,等等。
我给你个例子。
for i=1,3 do
list = {int=i, next=list}
end
当这个执行时,第一个next键将是空的,因为list还没有被定义。但在下一个表中,它的next键将是对前一个表的引用,等等。如果你尝试打印list.int和list.next,它们将指向int=3的表,因为for循环结束于3,因此变量指向那一部分。如果需要更改此内容,可以将数字for循环更改为以下内容:
for i=3,1,-1 do
因此它实际上看起来像这样:
list = {int=1, next=nil}
list = {int=2, next=previousTable}
list = {int=3, next=previousTable}
或者
list = {
int=3,
next = {
int=2,
next = {
int=1,
next=nil
}
}
}
希望这可以帮助。
2019-05-01 05:44:25
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这与其他语言(如c或c++)中的LIFO链表有些相似。是的,你理解得没错。
假设我的输入是(顺序相同):
那么,我的
list将被创建为:list = { value = "No", next = { value = 35, next = { value = "Hi", next = { value = 21 next = nil } } } }