您的位置:首页 > 理论基础 > 数据结构算法

Lua数据结构。

2017-04-17 18:16 141 查看

Lua数组/矩阵

> 方法一:
local function DoTest()
array = {}
for i = 1,4 do
array[i] = {}
for j = 1,4 do
array[i][j] = 12
end
end
for i = 1,4 do
for j = 1,4 do
print(array[i][j])
end
end
end
> 方法二:
local function DoTest()
local array = {}
for i = 1,4 do
for j = 1,4 do
-- 这里是一种计算偏差,这其实相当于一个一维连续数组了。
array[(i - 1) * 4 + j] = 12
end
end
for k = 1,4 do
for v = 1,4 do
print(array[(k - 1) * 4 + v])
end
end
end


Lua链表实现

list = nil
for i = 1,100 do
-- 这里next = list不太理解,它是怎么找到下一个的list的呐?
list = {next = list,value = i}
end
local l = list
while l do
print(l.value)
l = l.next
end

-- 其实我还是详细理解了一下,但我理解出来的结果是这样的。
-- 上面的一句其实好像先自己弄了一个不知道哪来的相同结构表,
-- 然后再把这个表给上一个list,所以我发现输出结果是倒序的。
temp = {}
-- 这里的list 实际上就是刚声明的那个nil,把nil赋值给新的表的next
-- 但是如果是第二次添加的话,这个list就是指第一个添加的list了,依此类推。
-- 其实这里是最不理解的了,它是怎么知道我现在是第几个表的哇?
-- 大约过了5分钟。。。
-- 我现在明白了,因为list是一个全局变量,再我最后一句赋值后,下次再进来的时候,
-- 明显他的next就是上次赋值后的那个list了,然后依此类推,并且它们是包括与被包括的。
-- next的值是另一个table,然后table里还有table。。。
temp.next = list
temp.data = var
list = temp


Lua队列

-- 这里想到的就是双端,每一端都是独立的一个队列。可以理解为一个x轴,
-- pushfirst越多,first值越小,依此类推。
local List = {}

function List.new()
return { first = 0,last = -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 > list.last then error("list is empty") end
local value = list[last]
list[last] = nil
list.last = last - 1
return value
end

list = List.new()
List.pushfirst(list,1990)
List.pushlast(list,1991)
print(List.popfirst(list))
print(List.poplast(list))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua