lua实现循环队列

6 篇文章 0 订阅
4 篇文章 0 订阅

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

2.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

 

function cyclic_queue:ctor(size)
    self._first =  0;
    self._last  = 0;
    self._size = size;
    self._count = 0;
    self._value = { };
end

function cyclic_queue:push(value)
    local pos = self._last% self._size + 1
    if self._count == self._size then
        self:pop()
    end
    self._value[pos] = value;
    self._count = self._count + 1
    self._last = pos;
end

function cyclic_queue:pop()
    local value = nil;

    if self._count ~= 0 then
        local pos = self._first % self._size + 1
        value = self._value[pos];
        self._value[pos] = nil;

        self._count = self._count - 1
        self._first = pos;
    end

    return value;
end

function cyclic_queue:ipairs()
    local i = self._first

    return function()
        if i - self._first == self._count then
            return nil
        end
        local pos = i%self._size + 1
        i = i + 1

        return pos, self._value[pos]
    end
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值