Lua数据结构。


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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值