脚本小子_Lua数据结构

一、Lua数据结构

Lua中table不是一种简单地数据结构,它可以作为其它数据结构的基础。其它语言提供的数据结构,如数组、线性表、队列和集合等。
这些在lua都可以通过table来实现出来
1、数组
  • 代码
local a = {}
for i=1,10 do
a[i] = i
end
注意: lua中数组的key必须从1开始,如下:
  • 代码
local a = {}
for i=-3,5 do
print(i)
a[i] = i
end
for k,v in ipairs(a) do
print(k,'=',v)
end
2、栈
  • 代码
local List = {}
function List.new()
return {first=0,last=-1}
end
function List.pf(list,value)
local first = list.first - 1
list.first = first
list[first] = value
end
function List.popf(list)
local first = list.first
if first > list.last then error("empty") end
local value = list[first]
list[first] = nil
list.first = list.first + 1
return value
end
  • 测试例子
local list
list = List.new()
List.pf(list,'a')
List.pf(list,'b')
List.pf(list,'c')
print(List.popf(list))
print(List.popf(list))
print(List.popf(list))
for k,v in pairs(list) do
print(k,v)
end
3、队列
  • 代码一
local Queue = {}
function Queue.new()
return {first=0,last=1}
end
function Queue.insertQueue(q,v)
local f = q.first + 1
q.first = f
q[f] = v
end

function Queue.outQueue(q)
local l = q.last
if l>q.first then error("empty") end
local v = q[l]
q[l] = nil
q.last = q.last + 1
return v
end
  • 代码二
local Queue = {}
function Queue.new()
return {index=1}
end
function Queue.insertQueue(q,v)
local i = #q
if q.index > 1 and i==0 then
q.index = 1
end
i = i + 1
q[i] = v
end
function Queue.outQueue(q)
local index = q.index
local i = #q
if i < index then error("empty") end
local v = q[index]
q[index] = nil
q.index = q.index + 1
return v
end
  • 测试代码
local q = {}
q = Queue.new()
Queue.insertQueue(q,'a')
Queue.insertQueue(q,'b')
print(Queue.outQueue(q))
print(Queue.outQueue(q))
4、集合
  • 代码
function set(l)
local set = {}
for k,v in pairs(l) do
set[v] = true
end
return set
end
  • 测试代码
local s = {'a','b','c','d'}
local set = set(s)
for k,v in pairs(set) do
print(k,'=',v)
end

local i = 'a3'
print(set[i])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值