版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaixh_89/article/details/84937272
c++中使用队列的话有queue(单项队列)、deque(双向队列),但在lua中并没有提供给我们可直接使用的这类数据结构,不过lua中有一个近乎万能的数据类型table,他可以实现其他语言中各种类型,今天在此先分享下双向列表的lua实现,原理就是保存一张表的首尾端索引,每次增删的时候修改下,并将push进来的值以索引为key保存起来,取值的时候再以索引为键取出即可,代码如下:
--双向队列实现
List = {}
function List:new()
local t = {first = 0, last = -1}
setmetatable(t, self)
self.__index = self
return t
end
function List:pushFirst(value)
local first = self.first - 1
self.first= first
self[first] = value
end
function List:pushLast(value)
local last = self.last + 1
self.last = last
self[last] = value
end
function List:popFirst()
if(self.first > self.last) then
error("list is empty")
end
local value = self[self.first]
self[self.first]= nil
self.first = self.first + 1
return value
end
function List:popLast()
if(self.first > self.last) then
error("list is empty")
end
local value = self[self.last]
self[self.last] = nil
self.last = self.last - 1
return value
end
local list = List:new()
list:pushFirst(2)
list:pushFirst(3)
list:pushFirst(4)
list:pushLast(5)
list:pushLast(6)
while list.first ~= 0 do
local value = list:popFirst()
print(value)
end
输出如下: