【Lua学习】循环队列实现:lua元表建立类

本文介绍了如何使用Lua的元表创建一个循环队列类,遵循先入先出的原则。通过元方法来操作类的局部成员变量,实现点访问模块的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Lua学习】循环队列实现:lua元表建立类

1、首先根据循环队列的理论(先入先出)想好类结构
2、学习lua的元表和元方法怎么建立类,访问冒号需要访问类里的局部成员变量 点访问模块的方法不需要变量

local Queue = {}

function Queue:new(len)
    local tempQue = {
        maxLength = len,
        size = 0,
        head = 0,
        tail = 0,
        que = {},
    }
    return setmetatable(tempQue, {__index = self})
end

function Queue:getSize()
    return self.size
end

function Queue:isEmpty()
    if self.size <= 0 then
        return true
    else 
        return false
    end
end

function Queue:isFull()
    if self.size == self.maxLength then
        return true
    else
        return false
    end
end

function Queue:push(id)
    if self:isFull() then
        --print("[queue] PUSH ERROR: QUEUE FULL")
        return false
    end
    local index = (self.tail % self.maxLength)
    self.que[index] = id
    --print("[queue] ", index, " ", self.que[index])
    self.tail = self.tail + 1
    self.size = self.size + 1
    --print("[queue] PUSH SUCCESS")
    return true
end

function Queue:pop()
    if self:isEmpty() then 
        --print("[queue] POP ERROR: QUEUE EMPTY")
        return false
    end
    id = self.que[Queue.head]
    self.head = self.head + 1
    self.head = self.head % self.maxLength
    self.size = self.size - 1
    return true, id
end

function Queue:top()
    return self.que[self.head]
end

function Queue:find(id)
    --print("[queue]head ", self.head, " tail ", self.tail)
    for i = self.head, self.size + self.tail - 1 do
        if self.que[i % self.maxLength] == id then 
            return true
        end
    end
    return false 
end

function Queue:clear()
    self.size = 0
    self.tail = 0
    self.head = 0
end

function Queue:deleteQueue()
    self.que = {}
    self.que = nil
    self.size = 0
    self.tail = 0
    self.head = 0
end

return Queue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值