lua中的queue

前些天需要一个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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容