lua实现循环队列

function Queue:ctor(capacity)
    self.capacity = capacity or 5
    self.queue = {}
    self.size_ = 0
    self.head = -1
    self.rear = -1
end

function Queue:EnQueue(element)
    if self.size_ == 0 then
        self.head = 0
        self.rear = 1
        self.size_ = 1
        self.queue[self.rear] = element
    else
        local temp = (self.rear + 1) % self.capacity 
        
        if temp == self.head then
            print("Error: capacity is full.")
            return 
        else
            self.rear = temp
        end
 
        self.queue[self.rear] = element
        self.size_ = self.size_ + 1
    end
end

function Queue:DeQueue() 
    if self:IsEmpty() then
        print("Error: The Queue is empty.")
        return
    end
    
    self.size_ = self.size_ - 1
    self.head = (self.head + 1) % self.capacity
    local value = self.queue[self.head]
    return value
end

function Queue:clear()
    self.queue = nil
    self.queue = {}
    self.size_ = 0
    self.head = -1
    self.rear = -1
end


function Queue:IsEmpty()
    if self:Size() == 0 then
        return true

    end

    return false
end


function Queue:Size()
    return self.size_
end

function Queue:Peek()
    if self:IsEmpty() then
        print("Error: The Queue is empty.")
        return
    end

    return self.queue[(self.head + 1) % self.capacity]
end

猜你喜欢

转载自blog.csdn.net/weixin_39407066/article/details/80849027