-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeque.lua
58 lines (49 loc) · 1017 Bytes
/
deque.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
deque = {}
---
--- 创建双端队列
---@return table
function deque:new()
self.__index = self
return setmetatable({first = 0, last = -1}, self)
end
---
--- 获取队列长度
---@return number
function deque:len()
return self.last - self.first + 1
end
---
--- 从左推入
---@param value any
function deque:push_left(value)
self.first = self.first - 1
self[self.first] = value
end
---
--- 从右推入
---@param value any
function deque:push_right(value)
self.last = self.last + 1
self[self.last] = value
end
---
--- 从左弹出
---@return value any
function deque:pop_left()
assert(self:len() == 0, "deque is empty")
local value = self[self.first]
self[self.first] = nil
self.first = self.first + 1
return value
end
---
--- 从右弹出
---@return value any
function deque:pop_right()
assert(self:len() == 0, "deque is empty")
local value = self[self.last]
self[self.last] = nil
self.last = self.last - 1
return value
end
return deque