89 lines
1.8 KiB
Lua
89 lines
1.8 KiB
Lua
Queue = {}
|
|
|
|
|
|
function Queue.new(capacity)
|
|
local self = {}
|
|
setmetatable(self,{__index = Queue})
|
|
self.capacity = capacity
|
|
self.queue = {}
|
|
self.size_ = 0
|
|
self.head = -1
|
|
self.rear = -1
|
|
return self
|
|
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
|
|
--print("1111111111111111111====>>>>")
|
|
--print(temp)
|
|
if temp == self.head then
|
|
error("Error: capacity is full.")
|
|
ViewUtil.ErrorTip(10001,"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
|
|
ViewUtil.ErrorTip(10002,"Error: The Queue is empty.")
|
|
error("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:Count()
|
|
return self.size_
|
|
end
|
|
|
|
function Queue:dump()
|
|
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].."}"
|
|
if(debug_print) then
|
|
print(str)
|
|
end
|
|
end |