Efficiently implement n queues in a single array
Here given code implementation process.
/*
C Program
Efficiently implement n queues in a single array
*/
#include <stdio.h>
#include <stdlib.h>
// Structure of queue
struct NQueue
{
int element;
int part;
int *data;
int *front;
int *tail;
int *next;
int counter;
};
struct NQueue *makeQueue(int element, int n)
{
if (n <= 0 || element == 0)
{
return NULL;
}
// Create dynamic NQueue
struct NQueue *q = (struct NQueue *) malloc(sizeof(struct NQueue));
if (q == NULL)
{
printf("\n Memory Overflow, when creating a new Queue\n");
}
else
{
// Create memory of queue elements
q->data = (int *) malloc(element *sizeof(int));
q->next = (int *) malloc(element *sizeof(int));
q->front = (int *) malloc(n *sizeof(int));
q->tail = (int *) malloc(n *sizeof(int));
q->counter = 0;
q->element = element;
q->part = n;
int i = 0;
// Set the initial value of front and tail of queue
for (i = 0; i < n; ++i)
{
q->front[i] = -1;
q->tail[i] = -1;
}
// Set next and data value
for (i = 0; i < element - 1; ++i)
{
q->data[i] = 0;
q->next[i] = i + 1;
}
q->next[element - 1] = -1;
q->data[element - 1] = 0;
}
return q;
}
// Determine that given queue is empty or not
int isEmpty(struct NQueue *q, int selection)
{
return q->front[selection] == -1;
}
// Determine that given queue is full or not
int isFull(struct NQueue *q)
{
if (q->counter == -1)
{
return 1;
}
return 0;
}
// Handles the request of adding a new element into select queue
void enqueue(struct NQueue *q, int selection, int data)
{
if (selection < 0 || selection >= q->part)
{
// When given queue is out of range
return;
}
if (isFull(q) == 1)
{
printf("\n Queue is Full \n");
}
else
{
int location = q->next[q->counter];
if (isEmpty(q, selection) == 1)
{
// First element of queue
q->front[selection] = q->counter;
q->tail[selection] = q->counter;
}
else
{
q->next[q->tail[selection]] = q->counter;
q->tail[selection] = q->counter;
}
q->data[q->counter] = data;
q->next[q->counter] = -1;
q->counter = location;
}
}
// Handles the request of remove selected queue element
int dequeue(struct NQueue *q, int selection)
{
if (selection < 0 || selection >= q->part)
{
// When given queue is out of range
return -1;
}
if (isEmpty(q, selection) == 1)
{
printf("\n Queue is Empty \n");
return -1;
}
else
{
// Get the removed element location
int location = q->front[selection];
// Get the removed element
int item = q->data[q->front[selection]];
q->data[q->front[selection]] = 0; // reset data
// Front is move to next element of queue
q->front[selection] = q->next[location];
// Set empty location in remove element
q->next[location] = q->counter;
// Set counter to current empty location
q->counter = location;
return item;
}
}
// Display queue elements
void printQueue(struct NQueue *q)
{
int location = 0;
for (int i = 0; i < q->part; ++i)
{
printf("\n Queue %d : ", i);
// Select Queue
location = q->front[i];
while (location != -1)
{
printf(" %d", q->data[location]);
location = q->next[location];
}
}
}
int main(int argc, char
const *argv[])
{
struct NQueue *q = makeQueue(15, 4);
// Add element in queue using random queue selection
// Put data in queue-0
enqueue(q, 0, 5);
// Put data in queue-1
enqueue(q, 1, 10);
// Put data in queue-2
enqueue(q, 2, 20);
// Put data in queue-3
enqueue(q, 3, 30);
enqueue(q, 3, 19);
// Put data in queue-0
enqueue(q, 0, 15);
enqueue(q, 0, 25);
// Put data in queue-3
enqueue(q, 3, 60);
enqueue(q, 3, 9);
enqueue(q, 3, 3);
// Put data in queue-2
enqueue(q, 2, 8);
enqueue(q, 2, 45);
printQueue(q);
// Perform remove operation
printf("\n Remove element of Queue %d is : %d", 0, dequeue(q, 0));
printf("\n Remove element of Queue %d is : %d", 0, dequeue(q, 0));
printf("\n Remove element of Queue %d is : %d", 3, dequeue(q, 3));
printf("\n Remove element of Queue %d is : %d", 1, dequeue(q, 1));
printQueue(q);
return 0;
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
/*
Java Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
public int element;
public int part;
public int []data;
public int []front;
public int []tail;
public int []next;
public int counter;
public NQueue(int element, int part)
{
this.element = element;
this.part = part;
this.counter = 0;
// Create memory of queue elements
this.data = new int[element];
this.next = new int[element];
this.front = new int[part];
this.tail = new int[part];
int i = 0;
// Set the initial value of front and tail of queue
for (i = 0; i < part; ++i)
{
this.front[i] = -1;
this.tail[i] = -1;
}
// Set next and data value
for (i = 0; i < element - 1; ++i)
{
this.data[i] = 0;
this.next[i] = i + 1;
}
this.next[element - 1] = -1;
this.data[element - 1] = 0;
}
// Determine that given queue is empty or not
public boolean isEmpty(int selection)
{
return this.front[selection] == -1;
}
// Determine that given queue is full or not
public boolean isFull()
{
if (this.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
public void enqueue(int selection, int data)
{
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return;
}
if (this.isFull() == true)
{
System.out.print("\n Queue is Full \n");
}
else
{
int location = this.next[this.counter];
if (this.isEmpty(selection) == true)
{
// First element of queue
this.front[selection] = this.counter;
this.tail[selection] = this.counter;
}
else
{
this.next[this.tail[selection]] = this.counter;
this.tail[selection] = this.counter;
}
this.data[this.counter] = data;
this.next[this.counter] = -1;
this.counter = location;
}
}
// Handles the request of remove selected queue element
public int dequeue(int selection)
{
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return -1;
}
else if (this.isEmpty(selection) == true)
{
System.out.print("\n Queue is Empty \n");
}
else
{
// Get the removed element location
int location = this.front[selection];
// Get the removed element
int item = this.data[this.front[selection]];
this.data[this.front[selection]] = 0;
// reset data
// Front is move to next element of queue
this.front[selection] = this.next[location];
// Set empty location in remove element
this.next[location] = this.counter;
// Set counter to current empty location
this.counter = location;
return item;
}
return -1;
}
}
public class Implementation
{
// Display queue elements
public void printQueue(NQueue q)
{
int location = 0;
for (int i = 0; i < q.part; ++i)
{
System.out.print("\n Queue " + i + " : ");
// Select Queue
location = q.front[i];
while (location != -1)
{
System.out.print(" " + q.data[location]);
location = q.next[location];
}
}
}
public static void main(String[] args)
{
NQueue q = new NQueue(15, 4);
Implementation task = new Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
System.out.print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
System.out.print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
System.out.print("\n Remove element of Queue " + 3 + " is : " + q.dequeue(3));
System.out.print("\n Remove element of Queue " + 1 + " is : " + q.dequeue(1));
task.printQueue(q);
}
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
// Include header file
#include <iostream>
using namespace std;
/*
C++ Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
public: int element;
int part;
int *data;
int *front;
int *tail;
int *next;
int counter;
NQueue(int element, int part)
{
this->element = element;
this->part = part;
this->counter = 0;
// Create memory of queue elements
this->data = new int[element];
this->next = new int[element];
this->front = new int[part];
this->tail = new int[part];
int i = 0;
// Set the initial value of front and tail of queue
for (i = 0; i < part; ++i)
{
this->front[i] = -1;
this->tail[i] = -1;
}
// Set next and data value
for (i = 0; i < element - 1; ++i)
{
this->data[i] = 0;
this->next[i] = i + 1;
}
this->next[element - 1] = -1;
this->data[element - 1] = 0;
}
// Determine that given queue is empty or not
bool isEmpty(int selection)
{
return this->front[selection] == -1;
}
// Determine that given queue is full or not
bool isFull()
{
if (this->counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
void enqueue(int selection, int data)
{
// When given queue is out of range
if (selection < 0 || selection >= this->part)
{
return;
}
if (this->isFull() == true)
{
cout << "\n Queue is Full \n";
}
else
{
int location = this->next[this->counter];
if (this->isEmpty(selection) == true)
{
// First element of queue
this->front[selection] = this->counter;
this->tail[selection] = this->counter;
}
else
{
this->next[this->tail[selection]] = this->counter;
this->tail[selection] = this->counter;
}
this->data[this->counter] = data;
this->next[this->counter] = -1;
this->counter = location;
}
}
// Handles the request of remove selected queue element
int dequeue(int selection)
{
if (selection < 0 || selection >= this->part)
{
// When given queue is out of range
return -1;
}
else if (this->isEmpty(selection) == true)
{
cout << "\n Queue is Empty \n";
}
else
{
// Get the removed element location
int location = this->front[selection];
// Get the removed element
int item = this->data[this->front[selection]];
this->data[this->front[selection]] = 0;
// reset data
// Front is move to next element of queue
this->front[selection] = this->next[location];
// Set empty location in remove element
this->next[location] = this->counter;
// Set counter to current empty location
this->counter = location;
return item;
}
return -1;
}
};
class Implementation
{
public:
// Display queue elements
void printQueue(NQueue q)
{
int location = 0;
for (int i = 0; i < q.part; ++i)
{
cout << "\n Queue " << i << " : ";
// Select Queue
location = q.front[i];
while (location != -1)
{
cout << " " << q.data[location];
location = q.next[location];
}
}
}
};
int main()
{
NQueue q = NQueue(15, 4);
Implementation task = Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
cout << "\n Remove element of Queue " << 0 << " is : " << q.dequeue(0);
cout << "\n Remove element of Queue " << 0 << " is : " << q.dequeue(0);
cout << "\n Remove element of Queue " << 3 << " is : " << q.dequeue(3);
cout << "\n Remove element of Queue " << 1 << " is : " << q.dequeue(1);
task.printQueue(q);
return 0;
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
// Include namespace system
using System;
/*
C# Program for
Efficiently implement n queues in a single array
*/
public class NQueue
{
public int element;
public int part;
public int[] data;
public int[] front;
public int[] tail;
public int[] next;
public int counter;
public NQueue(int element, int part)
{
this.element = element;
this.part = part;
this.counter = 0;
// Create memory of queue elements
this.data = new int[element];
this.next = new int[element];
this.front = new int[part];
this.tail = new int[part];
int i = 0;
// Set the initial value of front and tail of queue
for (i = 0; i < part; ++i)
{
this.front[i] = -1;
this.tail[i] = -1;
}
// Set next and data value
for (i = 0; i < element - 1; ++i)
{
this.data[i] = 0;
this.next[i] = i + 1;
}
this.next[element - 1] = -1;
this.data[element - 1] = 0;
}
// Determine that given queue is empty or not
public Boolean isEmpty(int selection)
{
return this.front[selection] == -1;
}
// Determine that given queue is full or not
public Boolean isFull()
{
if (this.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
public void enqueue(int selection, int data)
{
// When given queue is out of range
if (selection < 0 || selection >= this.part)
{
return;
}
if (this.isFull() == true)
{
Console.Write("\n Queue is Full \n");
}
else
{
int location = this.next[this.counter];
if (this.isEmpty(selection) == true)
{
// First element of queue
this.front[selection] = this.counter;
this.tail[selection] = this.counter;
}
else
{
this.next[this.tail[selection]] = this.counter;
this.tail[selection] = this.counter;
}
this.data[this.counter] = data;
this.next[this.counter] = -1;
this.counter = location;
}
}
// Handles the request of remove selected queue element
public int dequeue(int selection)
{
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return -1;
}
else if (this.isEmpty(selection) == true)
{
Console.Write("\n Queue is Empty \n");
}
else
{
// Get the removed element location
int location = this.front[selection];
// Get the removed element
int item = this.data[this.front[selection]];
this.data[this.front[selection]] = 0;
// reset data
// Front is move to next element of queue
this.front[selection] = this.next[location];
// Set empty location in remove element
this.next[location] = this.counter;
// Set counter to current empty location
this.counter = location;
return item;
}
return -1;
}
}
public class Implementation
{
// Display queue elements
public void printQueue(NQueue q)
{
int location = 0;
for (int i = 0; i < q.part; ++i)
{
Console.Write("\n Queue " + i + " : ");
// Select Queue
location = q.front[i];
while (location != -1)
{
Console.Write(" " + q.data[location]);
location = q.next[location];
}
}
}
public static void Main(String[] args)
{
NQueue q = new NQueue(15, 4);
Implementation task = new Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
Console.Write("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
Console.Write("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
Console.Write("\n Remove element of Queue " + 3 + " is : " + q.dequeue(3));
Console.Write("\n Remove element of Queue " + 1 + " is : " + q.dequeue(1));
task.printQueue(q);
}
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
<?php
/*
Php Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
public $element;
public $part;
public $data;
public $front;
public $tail;
public $next;
public $counter;
function __construct($element, $part)
{
$this->element = $element;
$this->part = $part;
$this->counter = 0;
// Create memory of queue elements
$this->data = array_fill(0, $element, 0);
$this->next = array_fill(0, $element, 0);
$this->front = array_fill(0, $part, 0);
$this->tail = array_fill(0, $part, 0);
$i = 0;
// Set the initial value of front and tail of queue
for ($i = 0; $i < $part; ++$i)
{
$this->front[$i] = -1;
$this->tail[$i] = -1;
}
// Set next and data value
for ($i = 0; $i < $element - 1; ++$i)
{
$this->next[$i] = $i + 1;
}
$this->next[$element - 1] = -1;
}
// Determine that given queue is empty or not
public function isEmpty($selection)
{
return $this->front[$selection] == -1;
}
// Determine that given queue is full or not
public function isFull()
{
if ($this->counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
public function enqueue($selection, $data)
{
// When given queue is out of range
if ($selection < 0 || $selection >= $this->part)
{
return;
}
if ($this->isFull() == true)
{
echo "\n Queue is Full \n";
}
else
{
$location = $this->next[$this->counter];
if ($this->isEmpty($selection) == true)
{
// First element of queue
$this->front[$selection] = $this->counter;
$this->tail[$selection] = $this->counter;
}
else
{
$this->next[$this->tail[$selection]] = $this->counter;
$this->tail[$selection] = $this->counter;
}
$this->data[$this->counter] = $data;
$this->next[$this->counter] = -1;
$this->counter = $location;
}
}
// Handles the request of remove selected queue element
public function dequeue($selection)
{
if ($selection < 0 || $selection >= $this->part)
{
// When given queue is out of range
return -1;
}
else if ($this->isEmpty($selection) == true)
{
echo "\n Queue is Empty \n";
}
else
{
// Get the removed element location
$location = $this->front[$selection];
// Get the removed element
$item = $this->data[$this->front[$selection]];
$this->data[$this->front[$selection]] = 0;
// reset data
// Front is move to next element of queue
$this->front[$selection] = $this->next[$location];
// Set empty location in remove element
$this->next[$location] = $this->counter;
// Set counter to current empty location
$this->counter = $location;
return $item;
}
return -1;
}
}
class Implementation
{
// Display queue elements
public function printQueue($q)
{
$location = 0;
for ($i = 0; $i < $q->part; ++$i)
{
echo "\n Queue ". $i ." : ";
// Select Queue
$location = $q->front[$i];
while ($location != -1)
{
echo " ". $q->data[$location];
$location = $q->next[$location];
}
}
}
}
function main()
{
$q = new NQueue(15, 4);
$task = new Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
$q->enqueue(0, 5);
// Put data in queue-1
$q->enqueue(1, 10);
// Put data in queue-2
$q->enqueue(2, 20);
// Put data in queue-3
$q->enqueue(3, 30);
$q->enqueue(3, 19);
// Put data in queue-0
$q->enqueue(0, 15);
$q->enqueue(0, 25);
// Put data in queue-3
$q->enqueue(3, 60);
$q->enqueue(3, 9);
$q->enqueue(3, 3);
// Put data in queue-2
$q->enqueue(2, 8);
$q->enqueue(2, 45);
$task->printQueue($q);
// Perform remove operation
echo "\n Remove element of Queue ". 0 ." is : ". $q->dequeue(0);
echo "\n Remove element of Queue ". 0 ." is : ". $q->dequeue(0);
echo "\n Remove element of Queue ". 3 ." is : ". $q->dequeue(3);
echo "\n Remove element of Queue ". 1 ." is : ". $q->dequeue(1);
$task->printQueue($q);
}
main();
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
/*
Node Js Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
constructor(element, part)
{
this.element = element;
this.part = part;
this.counter = 0;
// Create memory of queue elements
this.data = Array(element).fill(0);
this.next = Array(element).fill(0);
this.front = Array(part).fill(-1);
this.tail = Array(part).fill(-1);
var i = 0;
// Set next and data value
for (i = 0; i < element - 1; ++i)
{
this.next[i] = i + 1;
}
this.next[element - 1] = -1;
}
// Determine that given queue is empty or not
isEmpty(selection)
{
return this.front[selection] == -1;
}
// Determine that given queue is full or not
isFull()
{
if (this.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
enqueue(selection, data)
{
// When given queue is out of range
if (selection < 0 || selection >= this.part)
{
return;
}
if (this.isFull() == true)
{
process.stdout.write("\n Queue is Full \n");
}
else
{
var location = this.next[this.counter];
if (this.isEmpty(selection) == true)
{
// First element of queue
this.front[selection] = this.counter;
this.tail[selection] = this.counter;
}
else
{
this.next[this.tail[selection]] = this.counter;
this.tail[selection] = this.counter;
}
this.data[this.counter] = data;
this.next[this.counter] = -1;
this.counter = location;
}
}
// Handles the request of remove selected queue element
dequeue(selection)
{
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return -1;
}
else if (this.isEmpty(selection) == true)
{
process.stdout.write("\n Queue is Empty \n");
}
else
{
// Get the removed element location
var location = this.front[selection];
// Get the removed element
var item = this.data[this.front[selection]];
this.data[this.front[selection]] = 0;
// reset data
// Front is move to next element of queue
this.front[selection] = this.next[location];
// Set empty location in remove element
this.next[location] = this.counter;
// Set counter to current empty location
this.counter = location;
return item;
}
return -1;
}
}
class Implementation
{
// Display queue elements
printQueue(q)
{
var location = 0;
for (var i = 0; i < q.part; ++i)
{
process.stdout.write("\n Queue " + i + " : ");
// Select Queue
location = q.front[i];
while (location != -1)
{
process.stdout.write(" " + q.data[location]);
location = q.next[location];
}
}
}
}
function main()
{
var q = new NQueue(15, 4);
var task = new Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
process.stdout.write("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
process.stdout.write("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
process.stdout.write("\n Remove element of Queue " + 3 + " is : " + q.dequeue(3));
process.stdout.write("\n Remove element of Queue " + 1 + " is : " + q.dequeue(1));
task.printQueue(q);
}
main();
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
# Python 3 Program for
# Efficiently implement n queues in a single array
class NQueue :
def __init__(self, element, part) :
self.element = element
self.part = part
self.counter = 0
# Create memory of queue elements
self.data = [0] * (element)
self.next = [0] * (element)
self.front = [-1] * (part)
self.tail = [-1] * (part)
i = 0
# Set next and data value
while (i < element - 1) :
self.next[i] = i + 1
i += 1
self.next[element - 1] = -1
# Determine that given queue is empty or not
def isEmpty(self, selection) :
return self.front[selection] == -1
# Determine that given queue is full or not
def isFull(self) :
if (self.counter == -1) :
return True
return False
# Handles the request of adding a new element into select queue
def enqueue(self, selection, data) :
# When given queue is out of range
if (selection < 0 or selection >= self.part) :
return
if (self.isFull() == True) :
print("\n Queue is Full ")
else :
location = self.next[self.counter]
if (self.isEmpty(selection) == True) :
# First element of queue
self.front[selection] = self.counter
self.tail[selection] = self.counter
else :
self.next[self.tail[selection]] = self.counter
self.tail[selection] = self.counter
self.data[self.counter] = data
self.next[self.counter] = -1
self.counter = location
# Handles the request of remove selected queue element
def dequeue(self, selection) :
if (selection < 0 or selection >= self.part) :
# When given queue is out of range
return -1
elif(self.isEmpty(selection) == True) :
print("\n Queue is Empty ")
else :
# Get the removed element location
location = self.front[selection]
# Get the removed element
item = self.data[self.front[selection]]
self.data[self.front[selection]] = 0
# reset data
# Front is move to next element of queue
self.front[selection] = self.next[location]
# Set empty location in remove element
self.next[location] = self.counter
# Set counter to current empty location
self.counter = location
return item
return -1
class Implementation :
# Display queue elements
def printQueue(self, q) :
location = 0
i = 0
while (i < q.part) :
print("\n Queue ", i ," : ", end = "")
# Select Queue
location = q.front[i]
while (location != -1) :
print(" ", q.data[location], end = "")
location = q.next[location]
i += 1
def main() :
q = NQueue(15, 4)
task = Implementation()
# Add element in queue using random queue selection
# Put data in queue-0
q.enqueue(0, 5)
# Put data in queue-1
q.enqueue(1, 10)
# Put data in queue-2
q.enqueue(2, 20)
# Put data in queue-3
q.enqueue(3, 30)
q.enqueue(3, 19)
# Put data in queue-0
q.enqueue(0, 15)
q.enqueue(0, 25)
# Put data in queue-3
q.enqueue(3, 60)
q.enqueue(3, 9)
q.enqueue(3, 3)
# Put data in queue-2
q.enqueue(2, 8)
q.enqueue(2, 45)
task.printQueue(q)
# Perform remove operation
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0), end = "")
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0), end = "")
print("\n Remove element of Queue ", 3 ," is : ", q.dequeue(3), end = "")
print("\n Remove element of Queue ", 1 ," is : ", q.dequeue(1), end = "")
task.printQueue(q)
if __name__ == "__main__": main()
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
# Ruby Program for
# Efficiently implement n queues in a single array
class NQueue
# Define the accessor and reader of class NQueue
attr_reader :element, :part, :data, :front, :tail, :next, :counter
attr_accessor :element, :part, :data, :front, :tail, :next, :counter
def initialize(element, part)
self.element = element
self.part = part
self.counter = 0
# Create memory of queue elements
self.data = Array.new(element) {0}
self.next = Array.new(element) {0}
self.front = Array.new(part) {-1}
self.tail = Array.new(part) {-1}
i = 0
# Set next and data value
while (i < element - 1)
self.next[i] = i + 1
i += 1
end
self.next[element - 1] = -1
end
# Determine that given queue is empty or not
def isEmpty(selection)
return self.front[selection] == -1
end
# Determine that given queue is full or not
def isFull()
if (self.counter == -1)
return true
end
return false
end
# Handles the request of adding a new element into select queue
def enqueue(selection, data)
# When given queue is out of range
if (selection < 0 || selection >= self.part)
return
end
if (self.isFull() == true)
print("\n Queue is Full \n")
else
location = self.next[self.counter]
if (self.isEmpty(selection) == true)
# First element of queue
self.front[selection] = self.counter
self.tail[selection] = self.counter
else
self.next[self.tail[selection]] = self.counter
self.tail[selection] = self.counter
end
self.data[self.counter] = data
self.next[self.counter] = -1
self.counter = location
end
end
# Handles the request of remove selected queue element
def dequeue(selection)
if (selection < 0 || selection >= self.part)
# When given queue is out of range
return -1
elsif(self.isEmpty(selection) == true)
print("\n Queue is Empty \n")
else
# Get the removed element location
location = self.front[selection]
# Get the removed element
item = self.data[self.front[selection]]
self.data[self.front[selection]] = 0
# reset data
# Front is move to next element of queue
self.front[selection] = self.next[location]
# Set empty location in remove element
self.next[location] = self.counter
# Set counter to current empty location
self.counter = location
return item
end
return -1
end
end
class Implementation
# Display queue elements
def printQueue(q)
location = 0
i = 0
while (i < q.part)
print("\n Queue ", i ," : ")
# Select Queue
location = q.front[i]
while (location != -1)
print(" ", q.data[location])
location = q.next[location]
end
i += 1
end
end
end
def main()
q = NQueue.new(15, 4)
task = Implementation.new()
# Add element in queue using random queue selection
# Put data in queue-0
q.enqueue(0, 5)
# Put data in queue-1
q.enqueue(1, 10)
# Put data in queue-2
q.enqueue(2, 20)
# Put data in queue-3
q.enqueue(3, 30)
q.enqueue(3, 19)
# Put data in queue-0
q.enqueue(0, 15)
q.enqueue(0, 25)
# Put data in queue-3
q.enqueue(3, 60)
q.enqueue(3, 9)
q.enqueue(3, 3)
# Put data in queue-2
q.enqueue(2, 8)
q.enqueue(2, 45)
task.printQueue(q)
# Perform remove operation
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0))
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0))
print("\n Remove element of Queue ", 3 ," is : ", q.dequeue(3))
print("\n Remove element of Queue ", 1 ," is : ", q.dequeue(1))
task.printQueue(q)
end
main()
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
/*
Scala Program for
Efficiently implement n queues in a single array
*/
class NQueue(var element: Int , var part: Int ,
var data: Array[Int] , var front: Array[Int] ,
var tail: Array[Int] , var next: Array[Int] , var counter: Int)
{
def this(element: Int, part: Int)
{
this(element, part,
Array.fill[Int](element)(0),
Array.fill[Int](part)(-1),
Array.fill[Int](part)(-1),
Array.fill[Int](element)(0), 0);
var i: Int = 0
// Set next and data value
while (i < element - 1)
{
this.next(i) = i+1;
i += 1
}
this.next(element - 1) = -1;
}
// Determine that given queue is empty or not
def isEmpty(selection: Int): Boolean = {
return this.front(selection) == -1;
}
// Determine that given queue is full or not
def isFull(): Boolean = {
if (this.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
def enqueue(selection: Int, data: Int): Unit = {
// When given queue is out of range
if (selection < 0 || selection >= this.part)
{
return;
}
if (this.isFull() == true)
{
print("\n Queue is Full \n");
}
else
{
var location: Int = this.next(this.counter);
if (this.isEmpty(selection) == true)
{
// First element of queue
this.front(selection) = this.counter;
this.tail(selection) = this.counter;
}
else
{
this.next(this.tail(selection)) = this.counter;
this.tail(selection) = this.counter;
}
this.data(this.counter) = data;
this.next(this.counter) = -1;
this.counter = location;
}
}
// Handles the request of remove selected queue element
def dequeue(selection: Int): Int = {
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return -1;
}
else if (this.isEmpty(selection) == true)
{
print("\n Queue is Empty \n");
}
else
{
// Get the removed element location
var location: Int = this.front(selection);
// Get the removed element
var item: Int = this.data(this.front(selection));
this.data(this.front(selection)) = 0;
// reset data
// Front is move to next element of queue
this.front(selection) = this.next(location);
// Set empty location in remove element
this.next(location) = this.counter;
// Set counter to current empty location
this.counter = location;
return item;
}
return -1;
}
}
class Implementation
{
// Display queue elements
def printQueue(q: NQueue): Unit = {
var location: Int = 0;
var i: Int = 0;
while (i < q.part)
{
print("\n Queue " + i + " : ");
// Select Queue
location = q.front(i);
while (location != -1)
{
print(" " + q.data(location));
location = q.next(location);
}
i += 1;
}
}
}
object Main
{
def main(args: Array[String]): Unit = {
var q: NQueue = new NQueue(15, 4);
var task: Implementation = new Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
print("\n Remove element of Queue " + 3 + " is : " + q.dequeue(3));
print("\n Remove element of Queue " + 1 + " is : " + q.dequeue(1));
task.printQueue(q);
}
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
/*
Swift 4 Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
var element: Int;
var part: Int;
var data: [Int];
var front: [Int];
var tail: [Int];
var next: [Int];
var counter: Int;
init(_ element: Int, _ part: Int)
{
self.element = element;
self.part = part;
self.counter = 0;
// Create memory of queue elements
self.data = Array(repeating: 0, count: element);
self.next = Array(repeating: 0, count: element);
self.front = Array(repeating: -1, count: part);
self.tail = Array(repeating: -1, count: part);
var i: Int = 0;
// Set next and data value
while (i < element - 1)
{
self.next[i] = i + 1;
i += 1;
}
self.next[element - 1] = -1;
}
// Determine that given queue is empty or not
func isEmpty(_ selection: Int)->Bool
{
return self.front[selection] == -1;
}
// Determine that given queue is full or not
func isFull()->Bool
{
if (self.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
func enqueue(_ selection: Int, _ data: Int)
{
// When given queue is out of range
if (selection < 0 || selection >= self.part)
{
return;
}
if (self.isFull() == true)
{
print("\n Queue is Full ");
}
else
{
let location: Int = self.next[self.counter];
if (self.isEmpty(selection) == true)
{
// First element of queue
self.front[selection] = self.counter;
self.tail[selection] = self.counter;
}
else
{
self.next[self.tail[selection]] = self.counter;
self.tail[selection] = self.counter;
}
self.data[self.counter] = data;
self.next[self.counter] = -1;
self.counter = location;
}
}
// Handles the request of remove selected queue element
func dequeue(_ selection: Int)->Int
{
if (selection < 0 || selection >= self.part)
{
// When given queue is out of range
return -1;
}
else if (self.isEmpty(selection) == true)
{
print("\n Queue is Empty ");
}
else
{
// Get the removed element location
let location: Int = self.front[selection];
// Get the removed element
let item: Int = self.data[self.front[selection]];
self.data[self.front[selection]] = 0;
// reset data
// Front is move to next element of queue
self.front[selection] = self.next[location];
// Set empty location in remove element
self.next[location] = self.counter;
// Set counter to current empty location
self.counter = location;
return item;
}
return -1;
}
}
class Implementation
{
// Display queue elements
func printQueue(_ q: NQueue? )
{
var location: Int = 0;
var i: Int = 0;
while (i < q!.part)
{
print("\n Queue ", i ," : ", terminator: "");
// Select Queue
location = q!.front[i];
while (location != -1)
{
print(" ", q!.data[location], terminator: "");
location = q!.next[location];
}
i += 1;
}
}
}
func main()
{
let q: NQueue = NQueue(15, 4);
let task: Implementation = Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0), terminator: "");
print("\n Remove element of Queue ", 0 ," is : ", q.dequeue(0), terminator: "");
print("\n Remove element of Queue ", 3 ," is : ", q.dequeue(3), terminator: "");
print("\n Remove element of Queue ", 1 ," is : ", q.dequeue(1), terminator: "");
task.printQueue(q);
}
main();
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
/*
Kotlin Program for
Efficiently implement n queues in a single array
*/
class NQueue
{
var element: Int;
var part: Int;
var data: Array <Int> ;
var front: Array <Int> ;
var tail: Array <Int> ;
var next: Array <Int> ;
var counter: Int;
constructor(element: Int, part: Int)
{
this.element = element;
this.part = part;
this.counter = 0;
// Create memory of queue elements
this.data = Array(element)
{
0
};
this.next = Array(element)
{
0
};
this.front = Array(part)
{
-1
};
this.tail = Array(part)
{
-1
};
var i: Int = 0;
// Set next and data value
while (i < element - 1)
{
this.next[i] = i + 1;
i += 1;
}
this.next[element - 1] = -1;
}
// Determine that given queue is empty or not
fun isEmpty(selection: Int): Boolean
{
return this.front[selection] == -1;
}
// Determine that given queue is full or not
fun isFull(): Boolean
{
if (this.counter == -1)
{
return true;
}
return false;
}
// Handles the request of adding a new element into select queue
fun enqueue(selection: Int, data: Int): Unit
{
// When given queue is out of range
if (selection < 0 || selection >= this.part)
{
return;
}
if (this.isFull() == true)
{
print("\n Queue is Full \n");
}
else
{
var location: Int = this.next[this.counter];
if (this.isEmpty(selection) == true)
{
// First element of queue
this.front[selection] = this.counter;
this.tail[selection] = this.counter;
}
else
{
this.next[this.tail[selection]] = this.counter;
this.tail[selection] = this.counter;
}
this.data[this.counter] = data;
this.next[this.counter] = -1;
this.counter = location;
}
}
// Handles the request of remove selected queue element
fun dequeue(selection: Int): Int
{
if (selection < 0 || selection >= this.part)
{
// When given queue is out of range
return -1;
}
else if (this.isEmpty(selection) == true)
{
print("\n Queue is Empty \n");
}
else
{
// Get the removed element location
var location: Int = this.front[selection];
// Get the removed element
var item: Int = this.data[this.front[selection]];
this.data[this.front[selection]] = 0;
// reset data
// Front is move to next element of queue
this.front[selection] = this.next[location];
// Set empty location in remove element
this.next[location] = this.counter;
// Set counter to current empty location
this.counter = location;
return item;
}
return -1;
}
}
class Implementation
{
// Display queue elements
fun printQueue(q: NQueue): Unit
{
var location: Int;
var i: Int = 0;
while (i < q.part)
{
print("\n Queue " + i + " : ");
// Select Queue
location = q.front[i];
while (location != -1)
{
print(" " + q.data[location]);
location = q.next[location];
}
i += 1;
}
}
}
fun main(args: Array < String > ): Unit
{
var q: NQueue = NQueue(15, 4);
var task: Implementation = Implementation();
// Add element in queue using random queue selection
// Put data in queue-0
q.enqueue(0, 5);
// Put data in queue-1
q.enqueue(1, 10);
// Put data in queue-2
q.enqueue(2, 20);
// Put data in queue-3
q.enqueue(3, 30);
q.enqueue(3, 19);
// Put data in queue-0
q.enqueue(0, 15);
q.enqueue(0, 25);
// Put data in queue-3
q.enqueue(3, 60);
q.enqueue(3, 9);
q.enqueue(3, 3);
// Put data in queue-2
q.enqueue(2, 8);
q.enqueue(2, 45);
task.printQueue(q);
// Perform remove operation
print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
print("\n Remove element of Queue " + 0 + " is : " + q.dequeue(0));
print("\n Remove element of Queue " + 3 + " is : " + q.dequeue(3));
print("\n Remove element of Queue " + 1 + " is : " + q.dequeue(1));
task.printQueue(q);
}
Output
Queue 0 : 5 15 25
Queue 1 : 10
Queue 2 : 20 8 45
Queue 3 : 30 19 60 9 3
Remove element of Queue 0 is : 5
Remove element of Queue 0 is : 15
Remove element of Queue 3 is : 30
Remove element of Queue 1 is : 10
Queue 0 : 25
Queue 1 :
Queue 2 : 20 8 45
Queue 3 : 19 60 9 3
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment