{"ScriptPreparationCode":"function createLinkedListQueue() {\r\n\tlet length = 0\r\n\tlet head = undefined\r\n\tlet tail = undefined\r\n\treturn {\r\n\t\tenqueue(value) {\r\n\t\t\tenqueueNode(value)\r\n\t\t},\r\n\t\tdequeue() {\r\n\t\t\treturn dequeueNode()\r\n\t\t},\r\n\t\tsize() {\r\n\t\t\treturn length\r\n\t\t},\r\n\t\thead() {\r\n\t\t\treturn head\r\n\t\t},\r\n\t\ttail() {\r\n\t\t\treturn tail\r\n\t\t}\r\n\t}\r\n\tfunction enqueueNode(value) {\r\n\t\tconst node = {\r\n\t\t\tvalue,\r\n\t\t\tnext: undefined \r\n\t\t}\r\n\t\tif(!head) {\r\n\t\t\thead = node\r\n\t\t\ttail = node\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttail.next = node\r\n\t\t\ttail = node\r\n\t\t}\r\n\t\tlength \u002B= 1\t\r\n\t}\r\n\tfunction dequeueNode() {\r\n\t\tif(head) {\r\n\t\t\tconst value = head.value\r\n\t\t\thead = head.next\r\n\t\t\tlength -= 1\r\n\t\t\treturn value\r\n\t\t}\r\n\t\ttail = undefined\r\n\t\treturn undefined\r\n\t}\r\n}\r\n\r\nfunction createDoubleArrayQueue() {\r\n\treturn {\r\n\t\tinput: [],\r\n\t\toutput: [],\r\n\t\tenqueue(element) {\r\n\t\t\tthis.input.push(element)\r\n\t\t},\r\n\t\tdequeue() {\r\n\t\t\tif(this.output.length === 0) {\r\n\t\t\t\tthis.pivot()\r\n\t\t\t}\r\n\t\t\treturn this.output.pop()\r\n\t\t},\r\n\t\tpivot() {\r\n\t\t\tthis.output = this.input.reverse()\r\n\t\t\tthis.input = []\r\n\t\t},\r\n\t\tisEmpty() {\r\n\t\t\treturn this.input.length === 0 \u0026\u0026 this.output.length === 0\r\n\t\t}\r\n\t}\r\n}\r\n\r\nclass Queue {\r\n #queue = new Map()\r\n #head = 0\r\n #tail = 0\r\n\r\n enqueue(item) {\r\n this.#queue.set(this.#tail, item)\r\n this.#tail\u002B\u002B\r\n }\r\n\r\n dequeue() {\r\n if (this.#head === this.#tail) return;\r\n\r\n const value = this.#queue.get(this.#head)\r\n this.#queue.delete(this.#tail)\r\n this.#head\u002B\u002B\r\n\r\n return value\r\n }\r\n\r\n size() {\r\n return this.#tail - this.#head\r\n }\r\n}\r\n\r\nvar doubleQ = createDoubleArrayQueue()\r\nvar linkedListQ = createLinkedListQueue()\r\nvar queue = new Queue()\r\nvar queueSize = 1000\r\n","TestCases":[{"Name":"Double Array enque","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n doubleQ.enqueue(i)\r\n}","IsDeferred":false},{"Name":"Linked List enque","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n linkedListQ.enqueue(i)\r\n}","IsDeferred":false},{"Name":"Queue enqeue","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n queue.enqueue(i)\r\n}","IsDeferred":false},{"Name":"Array deque","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n linkedListQ.dequeue()\r\n}","IsDeferred":false},{"Name":"LinkedList deque","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n linkedListQ.dequeue()\r\n}","IsDeferred":false},{"Name":"Queue deque","Code":"for(let i = 0; i \u003C queueSize; i\u002B\u002B) {\r\n queue.dequeue()\r\n}","IsDeferred":false}]}