From aa84fdcc22047ca89f052ef50a7a05f0272540ef Mon Sep 17 00:00:00 2001 From: SumeetHaryani Date: Wed, 9 Oct 2019 02:23:15 +0530 Subject: [PATCH] add reverse first k elements of queue problem --- README.md | 2 + src/_DataStructures_/Queue/index.js | 11 +++- .../index.js | 61 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/_DataStructures_/Stack/reverse-first-k-elements-of-queue/index.js diff --git a/README.md b/README.md index 665bc09c..c058dd8d 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ Collection of interview questions with Unit Tests. Problems includes Data Struct - [Postfix Expression Evaluation](src/_DataStructures_/Stack/postfix-expression-evaluation) - [Remove Consecutive Repeated Digits](src/_DataStructures_/Stack/remove-consecutive-repeated-digits) - [Implement 2 Stacks using Single Array](src/_DataStructures_/Stack/2-stacks-using1-array) + - [Reverse First k Elements of Queue](src/_DataStructures_/Stack/reverse-first-k-elements-of-queue) + - [Queue](src/_DataStructures_/Queue) diff --git a/src/_DataStructures_/Queue/index.js b/src/_DataStructures_/Queue/index.js index 99d1861c..67a4189d 100644 --- a/src/_DataStructures_/Queue/index.js +++ b/src/_DataStructures_/Queue/index.js @@ -15,6 +15,15 @@ class Queue { remove() { return this.data.pop(); } + isEmpty() { + return this.data.length == 0; + } + enqueue(element) { + this.data.push(element); + } + length() { + return this.data.length; + } } -module.exports = Queue; +module.exports = Queue; \ No newline at end of file diff --git a/src/_DataStructures_/Stack/reverse-first-k-elements-of-queue/index.js b/src/_DataStructures_/Stack/reverse-first-k-elements-of-queue/index.js new file mode 100644 index 00000000..8a724038 --- /dev/null +++ b/src/_DataStructures_/Stack/reverse-first-k-elements-of-queue/index.js @@ -0,0 +1,61 @@ +/** + * Reverse first K elements of a Queue + * Given an integer K and a queue of integers,reverse the order of the first K elements of the queue, leaving the other elements in the same relative order. + * Input : Q = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11] k = 5 + * Output : Q = [ 20, 19, 18, 17, 16, 11, 12, 13, 14, 15] + * + */ +//const Queue = require.resolve('Queue'); + +const Queue = require('../../Queue/index'); + +const Stack = require('../index'); + +function reverseQueueElements(queue, k) { + let s = new Stack(); + + if (queue.isEmpty()) { + throw new Error("Empty Queue"); + } + if(k<=0 || k>queue.length()){ + throw new Error("Invalid K value"); + } + + for (let i = 0; i < k; i++) { + //push first k elements from queue and push in stack + s.push(queue.remove()); + } + + for (let i = 0; i < k; i++) { + //we reverse the k elements with the help of stack. + //pop all the k elements from stack and add to queue. + let no = s.pop(); + queue.add(no); + } + + for (let i = 0; i < queue.length() - k; i++) { + //bring the k elments again back to front to maintain the queue order. + queue.add(queue.peek()); + queue.remove(); + + } + return queue; +} + +/* +let queue = new Queue(); +queue.add(11); +queue.add(12); +queue.add(13); +queue.add(14); +queue.add(15); +queue.add(16); +queue.add(17); +queue.add(18); +queue.add(19); +queue.add(20); +console.log("Queue before:", queue.data); +let k = 5; +let reversedQueue=reverseQueueElements(queue, k); +console.log("Queue after:", queue.data); +*/ \ No newline at end of file