平时我们在其他语言中,经常会用到如数组,矩阵,队列和栈等一些数据结构,而lua似乎并没有这些数据类型,lua只提供了table类型,但是通过table类型我们几乎可以实现所有常用的数据类型。

数组

数组的实现非常简单,table的数据类型类似与C#中的字典,存储kv对,我们只取value即可。

local arr={1,2,3,6,4}

for key, value in pairs(arr) do
    print(key,value)
end

矩阵

矩阵也被称为多维数组,我们只需要嵌套一个table即可。

local mt={}
for i = 1, 10 do
    mt[i]={}
    for j = 1, 10 do
        mt[i][j]=0
    end
end

链表

对于像链表这样的数据结构,我们可以方便的通过一个指针域实现。

-- 链表
local l=nil
local l2={next=nil,value=10}
l={next=l2,value=200}

while l do
    print(l.value)
    l=l.next
end

队列和栈

下面以队列为例,栈也是类似的构造:

-- 队列和栈
Queue={}
function Queue.new()
    return{first=0,last=-1}
end

function Queue.push(queue,value)
    local first=queue.first-1
    queue.first=first
    queue[first]=value
end

function Queue.pop(queue)
    local last=queue.last
    if queue.last>last then
        error("queue 为空")
    end
    local value=queue[last]
    queue[last]=nil
    queue.last=last-1
    return value
end

local qq=Queue.new()
Queue.push(qq,5)
Queue.push(qq,8)