lua数据结构

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,N do
mt[i]={}
for j=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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值