Skip to content

Instantly share code, notes, and snippets.

@akrueger
Last active October 23, 2016 18:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akrueger/151295293f081d70dc6ad7cd5bd3f5ee to your computer and use it in GitHub Desktop.
Save akrueger/151295293f081d70dc6ad7cd5bd3f5ee to your computer and use it in GitHub Desktop.
function createLinkedListQueue() {
let length = 0
let head = undefined
let tail = undefined
return {
enqueue(value) {
enqueueNode(value)
},
dequeue() {
return dequeueNode()
},
size() {
return length
},
head() {
return head
},
tail() {
return tail
}
}
function enqueueNode(value) {
const node = {
value,
next: undefined
}
if(!head) {
head = node
tail = node
}
else {
tail.next = node
tail = node
}
length += 1
}
function dequeueNode() {
if(head) {
const value = head.value
head = head.next
length -= 1
return value
}
tail = undefined
return undefined
}
}
function createSingleArrayQueue() {
let queue = []
return {
enqueue(element) {
queue.push(element)
},
dequeue() {
return queue.shift()
},
size() {
return queue.length
}
}
}
function createDoubleArrayQueue() {
let input = []
let output = []
return {
enqueue(element) {
input.push(element)
},
dequeue() {
if(output.length === 0) {
pivot()
}
return output.pop()
},
size() {
return (input.length + output.length)
}
}
function pivot() {
output = input.reverse()
input = []
}
}
const singleQ = createSingleArrayQueue()
const doubleQ = createDoubleArrayQueue()
const linkedListQ = createLinkedListQueue()
const queueSize = 10000
console.log(`Queue size: ${queueSize}`)
for(let i = 0; i < queueSize; i++) {
singleQ.enqueue('testString' + i)
doubleQ.enqueue('testString' + i)
linkedListQ.enqueue('testString' + i)
}
const LINKED_LIST = 'Linked List Queue'
const DOUBLE_ARRAY = 'Double Array Queue'
const SINGLE_ARRAY = 'Single Array Queue'
console.time(LINKED_LIST)
for(let i = 0; i < queueSize; i++) {
linkedListQ.dequeue()
}
console.timeEnd(LINKED_LIST)
console.time(DOUBLE_ARRAY)
for(let i = 0; i < queueSize; i++) {
doubleQ.dequeue()
}
console.timeEnd(DOUBLE_ARRAY)
console.time(SINGLE_ARRAY)
for(let i = 0; i < queueSize; i++) {
singleQ.dequeue()
}
console.timeEnd(SINGLE_ARRAY)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment