前些天需要一个queue,网络上找了一下,没有合适自己的,所以就自己写一个。
网络上挺多代码都是关于deque的,但我的需求就是一个最简单的queue。
--[[
功能:队列,先进先出
--]]
queue = class("queue")
function queue.create()
local que = queue.new()
que.list = {}
return que
end
--从后面追加
function queue:push(node)
if not self.list then assert(false) return end
assert(node)
self.list[#self.list+1] = node
end
--弹出 第一个元素
function queue:pop()
if not self.list then assert(false) return end
local tmp_list = {}
for _,v in pairs(self.list) do
tmp_list[#tmp_list+1] = v
end
self.list = {}
local index = 0
for _,v in pairs(tmp_list) do
if index>0 then
self.list[#self.list+1] = v
end
index=index+1
end
end
--访问 最后一个元素
function queue:back()
if not self.list then assert(false) return nil end
if self:empty() then return nil end
return self.list[#self.list]
end
--访问 第一个元素
function queue:front()
if not self.list then assert(false) return nil end
if self:empty() then return nil end
return self.list[1]
end
function queue:size()
if not self.list then assert(false) return end
return #self.list
end
--置空
function queue:make_empty()
self.list = {}
end
function queue:empty()
if not self.list then assert(false) return end
if self:size()==0 then return true end
return false
end
function queue:print()
if not self.list then assert(false) return end
local size = string.format("size:%d", self:size())
for k,v in pairs(self.list) do
print(size,k,v)
end
end
-------------------------------------------------
--测试
local function test()
local q_obj = queue.create()
for i=1,3 do
q_obj:push(i)
end
q_obj:print()
local back = q_obj:back()
q_obj:pop()
q_obj:print()
q_obj:pop()
q_obj:print()
q_obj:pop()
q_obj:print()
end
test()
-------------------------------------------------
-- the end
-------------------------------------------------
学海无涯,错误难免,如有发现,尽请指正。
--the end