Last active
October 23, 2016 18:17
-
-
Save akrueger/151295293f081d70dc6ad7cd5bd3f5ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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