Files
grokking_algorithms/06_breadth-first_search/lua/deque.lua
zhangjiongwx d0ac45bcde Add Lua code for chapter 6-9 (#36)
* Add Lua code for chapter 6

* Add Lua code for chapter 7

* Add Lua code for chapter 8

* Add Lua code for chapter 9
2017-11-13 08:14:24 -08:00

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