2020-07-04 14:41:25 +08:00
|
|
|
--
|
|
|
|
|
-- Date: 2014-11-19 16:51:19
|
|
|
|
|
--
|
|
|
|
|
|
|
|
|
|
require("public.class")
|
2020-07-09 08:50:24 +08:00
|
|
|
---@class CLLQueue :ClassBase
|
2020-07-04 14:41:25 +08:00
|
|
|
CLLQueue = class("CLLQueue")
|
|
|
|
|
|
|
|
|
|
local insert = table.insert;
|
|
|
|
|
local remove = table.remove
|
|
|
|
|
function CLLQueue:ctor()
|
|
|
|
|
--self.capacity = capacity
|
|
|
|
|
self.queue = {}
|
|
|
|
|
--self.size_ = 0
|
|
|
|
|
--self.head = -1
|
|
|
|
|
--self.rear = -1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CLLQueue:enQueue(element)
|
|
|
|
|
insert(self.queue, 1, 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 CLLQueue:deQueue()
|
|
|
|
|
if self:isEmpty() then
|
|
|
|
|
return nil;
|
|
|
|
|
end
|
|
|
|
|
return remove(self.queue, #(self.queue))
|
|
|
|
|
--if self:isEmpty() then
|
|
|
|
|
-- print("Error: The CLLQueue 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 CLLQueue:contains(obj)
|
|
|
|
|
if self:isEmpty() then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
for i, v in ipairs(self.queue) do
|
|
|
|
|
if v == obj then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CLLQueue:clear()
|
|
|
|
|
self.queue = nil
|
|
|
|
|
self.queue = {}
|
|
|
|
|
--self.size_ = 0
|
|
|
|
|
--self.head = -1
|
|
|
|
|
--self.rear = -1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CLLQueue:isEmpty()
|
|
|
|
|
if #(self.queue) == 0 then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
--if self:size() == 0 then
|
|
|
|
|
-- return true
|
|
|
|
|
--end
|
|
|
|
|
--return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CLLQueue:size()
|
|
|
|
|
return #(self.queue)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function CLLQueue:printElement()
|
|
|
|
|
local str = ""
|
|
|
|
|
for i = self.size(), 1 do
|
|
|
|
|
str = str .. self.queue[i] .. ","
|
|
|
|
|
end
|
|
|
|
|
print(str)
|
|
|
|
|
--local h = self.head
|
|
|
|
|
--local r = self.rear
|
|
|
|
|
--local str = nil
|
|
|
|
|
--local first_flag = true
|
|
|
|
|
--while h ~= r do
|
|
|
|
|
-- if first_flag == true then
|
|
|
|
|
-- str = "{"..self.queue[h]
|
|
|
|
|
-- h = (h + 1) % self.capacity
|
|
|
|
|
-- first_flag = false
|
|
|
|
|
-- else
|
|
|
|
|
-- str = str..","..self.queue[h]
|
|
|
|
|
-- h = (h + 1) % self.capacity
|
|
|
|
|
-- end
|
|
|
|
|
--end
|
|
|
|
|
--str = str..","..self.queue[r].."}"
|
|
|
|
|
--print(str)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return CLLQueue
|