lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础。其他语言提供的数据结构,如数组、记录、线性表、队列、集合等,在lua中都可以通过table来表示。
数组:使用整数来索引table即可在lua中实现数组。因此,数组没有一个固定的大小,可以根据需要增长。通常,当初始化一个数组时,也就间接地定义了它的大小。例如在执行了以下代码后,任意对字段范围1-10001之外的访问都会返回一个Nil,而不是0:
a ={}
for i=1,1000 do
a[i]=0
end
a ={}
for i=1,1000 do
a[i]=0
end
矩阵与多维数组:
在lua中,有两种方式来表示矩阵。第一种是使用一个“数组的数组”,也就是说,一个table钟的每个元素是另一个table。例如,使用以下代码来创建N*M的零矩阵:
m ={}
for i =1,N do
mt[i]={}
for j=1,M do
mt[i][j]=0
end
end
带来灵活性创建三角矩阵:
m ={}
for i =1,i do
mt[i][j]=0
end
end
链表:由于table是动态的实体,所以在lua中实现链表是很方便的。每个结点以一个table来表示,一个连接只是结点table中的一个字段,该字段包含了对其他table的引用。例如,要实现一个基础的列表,其中每个结点具有两个字段:next和value,先创建一个用作列表头结点的变量:
--先创建一个用作列表头结点的变量
list = nil
--在表头插入一个元素,元素值为value
list ={next = list,value = v}
--遍历此列表:
local l = list
while l do
l =l.next
end
lua中队列的实现:
List ={}
function List.new()
return {first=0,lat =-1}
end
function List.pushfirst(list,value)
local first = list.first-1
list.first = first
list[first]=value
end
function list.pushlast(list,value)
local last = list.last+1
list.last = last
list[last]=value
end
function list.popfirst(list)
local first = list.first
if first>list.last then error("list is empty") end
local value = list[first]
list[first]= nil
list.first = first+1
return value
end
function list.poplast(list) local last = list.last if list.first >last then error("list is empty") end local value = list[last] list[last]= nil list.last = last-1 return value end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。