You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
912 B
48 lines
912 B
function Queue () { |
|
this.head = new Item('head', null) |
|
} |
|
module.exports = Queue |
|
|
|
Queue.prototype.append = function append (kind, value) { |
|
var item = new Item(kind, value) |
|
this.head.prepend(item) |
|
return item |
|
} |
|
|
|
Queue.prototype.isEmpty = function isEmpty () { |
|
return this.head.prev === this.head |
|
} |
|
|
|
Queue.prototype.first = function first () { |
|
return this.head.next |
|
} |
|
|
|
function Item (kind, value) { |
|
this.prev = this |
|
this.next = this |
|
this.kind = kind |
|
this.value = value |
|
} |
|
|
|
Item.prototype.prepend = function prepend (other) { |
|
other.prev = this.prev |
|
other.next = this |
|
other.prev.next = other |
|
other.next.prev = other |
|
} |
|
|
|
Item.prototype.dequeue = function dequeue () { |
|
var prev = this.prev |
|
var next = this.next |
|
|
|
prev.next = next |
|
next.prev = prev |
|
this.prev = this |
|
this.next = this |
|
|
|
return this.value |
|
} |
|
|
|
Item.prototype.isEmpty = function isEmpty () { |
|
return this.prev === this |
|
}
|
|
|