lua中写list数据结构的实现

使用tolua中list.lua

https://github.com/topameng/tolua/blob/master/Assets/ToLua/Lua/list.lua
我们可以将list理解为一个类

new方法:

local setmetatable = setmetatable

local list = {}
list.__index = list

function list:new()
	local t = {length = 0, _prev = 0, _next = 0}
	t._prev = t
	t._next = t
	return setmetatable(t, list)
end

new方法,返回一个空的list,成员有length长度,_prev和_next指针,初始都指向自己。

clear方法:

function list:clear()
	self._next = self
	self._prev = self
	self.length = 0
end

将length设置0,_next和_prev设置为指向自己。
在这里插入图片描述

插入节点的方法:

function list:push(value)
	--assert(value)
	local node = {value = value, _prev = 0, _next = 0, removed = false}

	self._prev._next = node
	node._next = self
	node._prev = self._prev
	self._prev = node

	self.length = self.length + 1
	return node
end

给定一个value,创建一个新的空节点node。

在这里插入图片描述
slef._prev.next = node
在这里插入图片描述
node._next = self
在这里插入图片描述
node._prev = self._prev
在这里插入图片描述
self._prev = node
在这里插入图片描述

ilist = function(_list) return list.next, _list, _list end
rilist = function(_list) return list.prev, _list, _list end

setmetatable(list, {__call = list.new})
return list

这个两个函数看不懂了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值