44 lines
1.3 KiB
CoffeeScript
44 lines
1.3 KiB
CoffeeScript
# Roughly following https://learnersbucket.com/tutorials/data-structures/implement-deque-data-structure-in-javascript/
|
|
|
|
export default class Deque
|
|
constructor: ->
|
|
@clear()
|
|
|
|
insertLeft: (elm) -> # Add an item on the left
|
|
if @left_full > 0
|
|
@items[--@left_full] = elm
|
|
else
|
|
@right_open++
|
|
@items.unshift elm
|
|
|
|
insertRight: (elm) -> # Add an item on the right of the list
|
|
@items[@right_open++] = elm
|
|
|
|
removeLeft: -> # Remove the item from the left
|
|
@nonempty() and @items[@left_full++]
|
|
|
|
removeRight: -> # Remove the item from the right
|
|
@nonempty() and @items[--@right_open]
|
|
|
|
left: -> # Peek the leftmost element
|
|
@nonempty and @items[@left_full]
|
|
|
|
right: -> # Peek the last element
|
|
@nonempty and @items[@right_open - 1]
|
|
|
|
nonempty: -> # Returns null if no elements
|
|
(@right_open > @left_full) or null
|
|
|
|
empty: -> # Returns null if any elements
|
|
(@right_open is @left_full) or null
|
|
|
|
size: -> # Number of elements
|
|
@right_open - @left_full
|
|
|
|
clear: -> # Remove all elements
|
|
@right_open = @left_full = 0
|
|
@items = []
|
|
|
|
toString: ->
|
|
"<#{@items[@left...@right].join(",")}>"
|