前些天需要一個queue,網(wǎng)絡上找了一下,沒有合適自己的,所以就自己寫一個。
網(wǎng)絡上挺多代碼都是關于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
-------------------------------------------------
學海無涯,錯誤難免,如有發(fā)現(xiàn),盡請指正。
--the end