* Add Lua code for chapter 6 * Add Lua code for chapter 7 * Add Lua code for chapter 8 * Add Lua code for chapter 9
46 lines
867 B
Lua
46 lines
867 B
Lua
deque = {}
|
|
|
|
function deque:new()
|
|
self.__index = self
|
|
return setmetatable({first = 0, last = -1}, self)
|
|
end
|
|
|
|
function deque:len()
|
|
return self.last - self.first + 1
|
|
end
|
|
|
|
function deque:push_left(value)
|
|
local first = self.first - 1
|
|
self.first = first
|
|
self[first] = value
|
|
end
|
|
|
|
function deque:push_right(value)
|
|
local last = self.last + 1
|
|
self.last = last
|
|
self[last] = value
|
|
end
|
|
|
|
function deque:pop_left()
|
|
local first = self.first
|
|
if first > self.last then
|
|
error "deque is empty"
|
|
end
|
|
local value = self[first]
|
|
self[first] = nil
|
|
self.first = first + 1
|
|
return value
|
|
end
|
|
|
|
function deque:pop_right()
|
|
local last = self.last
|
|
if self.first > last then
|
|
error "deque is empty"
|
|
end
|
|
local value = self[last]
|
|
self[last] = nil
|
|
self.last = last - 1
|
|
return value
|
|
end
|
|
|
|
return deque |