Skip to main content

Reverse a queue using stack

Here given code implementation process.

//C Program
//Reverse a queue using stack
#include <stdio.h>

#include <stdlib.h> //for malloc function

//Create structure of Queue
struct MyQueue
{
	int data;
	struct MyQueue *next;
};
struct MyStack
{
	struct MyQueue *element;
	struct MyStack *next;
};
// Define some global variables which is directly 
// will be accessed within below defined function.
// Queue pointer variables.
struct MyQueue *head = NULL, *tail = NULL;
//Stack pointer variable
struct MyStack *top = NULL;
//This function are add new element into queue
void enqueue(int value)
{
	//Create a dynamic node
	struct MyQueue *node = (struct MyQueue *) malloc(sizeof(struct MyQueue));
	if (node == NULL)
	{
		printf("Memory overflow\n");
	}
	else
	{
		//set new node data
		node->data = value;
		node->next = NULL;
		if (head == NULL)
		{
			//add first element into queue
			head = node;
			tail = node;
		}
		else
		{
			//add node at the end using tail pointer
			tail->next = node;
			tail = node;
		}
	}
}
//Delete a element into queue
int dequeue()
{
	int data = -1;
	if (head == NULL)
	{
		printf("Empty Queue\n");
		return data;
	}
	//Get the deleted node
	struct MyQueue *temp = head;
	data = temp->data;
	//visit to next node of queue
	head = head->next;
	if (head == NULL)
	{
		//When deleting a last node of linked list
		tail = NULL;
	}
	free(temp);
	temp = NULL;
	return data;
}
void push(struct MyQueue *node)
{
	struct MyStack *new_node = (struct MyStack *) malloc(sizeof(struct MyStack));
	if (new_node)
	{
		new_node->element = node;
		new_node->next = top;
		top = new_node;
	}
}
// This function are remove top node into stack and return 
// the queue element .
// Basically we are returns a value of data value but here added 
// a actual queue element into stack. 
// so return this node element
struct MyQueue *pop()
{
	if (top != NULL)
	{
		struct MyQueue *result = top->element;
		struct MyStack *temp = top;
		top->element = NULL;
		top = top->next;
		free(temp);
		temp = NULL;
		return result;
	}
	return NULL;
}
//Display all queue element
void print_queue()
{
	struct MyQueue *temp = head;
	while (temp != NULL)
	{
		printf("%d  ", temp->data);
		temp = temp->next;
	}
	printf("\n");
}
//This method are reverse the queue elements 
void reverse()
{
	struct MyQueue *temp = head;
	//First add all queue elements into stack
	while (head != NULL)
	{
		temp = head;
		//add current head node into stack
		push(head);
		//visit to next upcoming node
		head = head->next;
		//Note that we are not delete queue element 
		// so added element are hold next node information to queue 
		// so remove next node information
		// set nil
		temp->next = NULL;
	}
	//add stack elements into the actual queue
	while (top != NULL)
	{
		if (head == NULL)
		{
			// pop a stack element
			// And set that top queue element as first node of queue
			head = pop();
			// Because that is first node of queue.
			// So tail node is also hold the information of first node.
			tail = head;
		}
		else
		{
			//Add new stack top element into queue tail section
			tail->next = pop();
			//make a new tail node
			tail = tail->next;
		}
	}
}
int main()
{
	//Add queue elements
	enqueue(1);
	enqueue(2);
	enqueue(3);
	enqueue(4);
	enqueue(5);
	enqueue(9);
	enqueue(11);
  	printf("Before : ");
	//Display all queue elements
	print_queue();
	reverse();
  	printf("After : ");
	//Display all queue elements
	print_queue();
	return 0;
}

Output

Before : 1  2  3  4  5  9  11
After : 11  9  5  4  3  2  1
/*
	Java Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	public int data;
	public MyQueue next;
	//set new node value
	public MyQueue(int element)
	{
		this.data = element;
		this.next = null;
	}
}
class MyStack
{
	public MyQueue element;
	public MyStack next;
	//set new node data
	public MyStack(MyQueue element)
	{
		this.element = element;
		this.next = null;
	}
}
class Process
{
	public MyStack top;
	public MyQueue head;
	public MyQueue tail;
	public Process()
	{
		this.top = null;
		this.head = null;
		this.tail = null;
	}
	//This function are add new element into queue
	public void enqueue(int value)
	{
		//Create a dynamic node
		MyQueue node = new MyQueue(value);
		if (node == null)
		{
			System.out.print("Memory overflow\n");
		}
		else
		{
			if (this.head == null)
			{
				//add first element into queue
				this.head = node;
				this.tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				this.tail.next = node;
				this.tail = node;
			}
		}
	}
	//Delete a element into queue
	public int dequeue()
	{
		int data = -1;
		if (this.head == null)
		{
			System.out.print("Empty Queue\n");
			return data;
		}
		//Get the deleted node
		MyQueue temp = this.head;
		data = temp.data;
		//visit to next node of queue
		this.head = this.head.next;
		if (this.head == null)
		{
			//When deleting a last node of linked list
			this.tail = null;
		}
		temp = null;
		return data;
	}
	// Add Queue element into the stack
	public void push(MyQueue node)
	{
		MyStack new_node = new MyStack(node);
		if (new_node != null)
		{
			new_node.next = this.top;
			this.top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	public MyQueue pop()
	{
		if (this.top != null)
		{
			MyQueue result = this.top.element;
			MyStack temp = this.top;
			this.top.element = null;
			this.top = this.top.next;
			temp = null;
			return result;
		}
		return null;
	}
	//Display all queue element
	public void print_queue()
	{
		MyQueue temp = head;
		while (temp != null)
		{
			System.out.print(" " + temp.data + " ");
			temp = temp.next;
		}
		System.out.print("\n");
	}
	//This method are reverse the queue elements 
	public void reverse()
	{
		MyQueue temp = null;
		//First add all queue elements into stack
		while (this.head != null)
		{
			temp = this.head;
			// add current head node into stack
			this.push(this.head);
			// visit to next upcoming node
			this.head = this.head.next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp.next = null;
		}
		//add stack elements into the actual queue
		while (this.top != null)
		{
			if (this.head == null)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				this.head = this.pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				this.tail = this.head;
			}
			else
			{
				//Add new stack top element into queue tail section
				this.tail.next = this.pop();
				//make a new tail node
				this.tail = this.tail.next;
			}
		}
	}
	public static void main(String[] args)
	{
		Process obj = new Process();
		//Add queue elements
		obj.enqueue(1);
		obj.enqueue(2);
		obj.enqueue(3);
		obj.enqueue(4);
		obj.enqueue(5);
		obj.enqueue(9);
		obj.enqueue(11);
		//Display all queue elements
		obj.print_queue();
		obj.reverse();
		//Display all queue elements
		obj.print_queue();
	}
}

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
//Include header file
#include <iostream>

using namespace std;
/*
	C++ Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	public: int data;
	MyQueue * next;
	//set new node value
	MyQueue(int element)
	{
		this->data = element;
		this->next = NULL;
	}
};
class MyStack
{
	public: MyQueue * element;
	MyStack * next;
	//set new node data
	MyStack(MyQueue * element)
	{
		this->element = element;
		this->next = NULL;
	}
};
class Process
{
	public: MyStack * top;
	MyQueue * head;
	MyQueue * tail;
	Process()
	{
		this->top = NULL;
		this->head = NULL;
		this->tail = NULL;
	}
	//This function are add new element into queue
	void enqueue(int value)
	{
		//Create a dynamic node
		MyQueue * node = new MyQueue(value);
		if (node == NULL)
		{
			cout << "Memory overflow\n";
		}
		else
		{
			if (this->head == NULL)
			{
				//add first element into queue
				this->head = node;
				this->tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				this->tail->next = node;
				this->tail = node;
			}
		}
	}
	//Delete a element into queue
	int dequeue()
	{
		int data = -1;
		if (this->head == NULL)
		{
			cout << "Empty Queue\n";
			return data;
		}
		//Get the deleted node
		MyQueue * temp = this->head;
		data = temp->data;
		//visit to next node of queue
		this->head = this->head->next;
		if (this->head == NULL)
		{
			//When deleting a last node of linked list
			this->tail = NULL;
		}
		temp = NULL;
		return data;
	}
	// Add Queue element into the stack
	void push(MyQueue * node)
	{
		MyStack * new_node = new MyStack(node);
		if (new_node != NULL)
		{
			new_node->next = this->top;
			this->top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	MyQueue * pop()
	{
		if (this->top != NULL)
		{
			MyQueue * result = this->top->element;
			MyStack * temp = this->top;
			this->top->element = NULL;
			this->top = this->top->next;
			temp = NULL;
			return result;
		}
		return NULL;
	}
	//Display all queue element
	void print_queue()
	{
		MyQueue * temp = this->head;
		while (temp != NULL)
		{
			cout << " " << temp->data << " ";
			temp = temp->next;
		}
		cout << "\n";
	}
	//This method are reverse the queue elements 
	void reverse()
	{
		MyQueue * temp = NULL;
		//First add all queue elements into stack
		while (this->head != NULL)
		{
			temp = this->head;
			// add current head node into stack
			this->push(this->head);
			// visit to next upcoming node
			this->head = this->head->next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp->next = NULL;
		}
		//add stack elements into the actual queue
		while (this->top != NULL)
		{
			if (this->head == NULL)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				this->head = this->pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				this->tail = this->head;
			}
			else
			{
				//Add new stack top element into queue tail section
				this->tail->next = this->pop();
				//make a new tail node
				this->tail = this->tail->next;
			}
		}
	}
};
int main()
{
	Process obj = Process();
	//Add queue elements
	obj.enqueue(1);
	obj.enqueue(2);
	obj.enqueue(3);
	obj.enqueue(4);
	obj.enqueue(5);
	obj.enqueue(9);
	obj.enqueue(11);
	//Display all queue elements
	obj.print_queue();
	obj.reverse();
	//Display all queue elements
	obj.print_queue();
	return 0;
}

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
//Include namespace system
using System;
/*
	C# Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	public int data;
	public MyQueue next;
	//set new node value
	public MyQueue(int element)
	{
		this.data = element;
		this.next = null;
	}
}
class MyStack
{
	public MyQueue element;
	public MyStack next;
	//set new node data
	public MyStack(MyQueue element)
	{
		this.element = element;
		this.next = null;
	}
}
class Process
{
	public MyStack top;
	public MyQueue head;
	public MyQueue tail;
	public Process()
	{
		this.top = null;
		this.head = null;
		this.tail = null;
	}
	//This function are add new element into queue
	public void enqueue(int value)
	{
		//Create a dynamic node
		MyQueue node = new MyQueue(value);
		if (node == null)
		{
			Console.Write("Memory overflow\n");
		}
		else
		{
			if (this.head == null)
			{
				//add first element into queue
				this.head = node;
				this.tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				this.tail.next = node;
				this.tail = node;
			}
		}
	}
	//Delete a element into queue
	public int dequeue()
	{
		int data = -1;
		if (this.head == null)
		{
			Console.Write("Empty Queue\n");
			return data;
		}
		//Get the deleted node
		MyQueue temp = this.head;
		data = temp.data;
		//visit to next node of queue
		this.head = this.head.next;
		if (this.head == null)
		{
			//When deleting a last node of linked list
			this.tail = null;
		}
		temp = null;
		return data;
	}
	// Add Queue element into the stack
	public void push(MyQueue node)
	{
		MyStack new_node = new MyStack(node);
		if (new_node != null)
		{
			new_node.next = this.top;
			this.top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	public MyQueue pop()
	{
		if (this.top != null)
		{
			MyQueue result = this.top.element;
			this.top.element = null;
			this.top = this.top.next;
			return result;
		}
		return null;
	}
	//Display all queue element
	public void print_queue()
	{
		MyQueue temp = head;
		while (temp != null)
		{
			Console.Write(" " + temp.data + " ");
			temp = temp.next;
		}
		Console.Write("\n");
	}
	//This method are reverse the queue elements 
	public void reverse()
	{
		MyQueue temp = null;
		//First add all queue elements into stack
		while (this.head != null)
		{
			temp = this.head;
			// add current head node into stack
			this.push(this.head);
			// visit to next upcoming node
			this.head = this.head.next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp.next = null;
		}
		//add stack elements into the actual queue
		while (this.top != null)
		{
			if (this.head == null)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				this.head = this.pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				this.tail = this.head;
			}
			else
			{
				//Add new stack top element into queue tail section
				this.tail.next = this.pop();
				//make a new tail node
				this.tail = this.tail.next;
			}
		}
	}
	public static void Main(String[] args)
	{
		Process obj = new Process();
		//Add queue elements
		obj.enqueue(1);
		obj.enqueue(2);
		obj.enqueue(3);
		obj.enqueue(4);
		obj.enqueue(5);
		obj.enqueue(9);
		obj.enqueue(11);
		//Display all queue elements
		obj.print_queue();
		obj.reverse();
		//Display all queue elements
		obj.print_queue();
	}
}

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
<?php
/*
	Php Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	public $data;
	public $next;
	//set new node value
	function __construct($element)
	{
		$this->data = $element;
		$this->next = null;
	}
}
class MyStack
{
	public $element;
	public $next;
	//set new node data
	function __construct($element)
	{
		$this->element = $element;
		$this->next = null;
	}
}
class Process
{
	public $top;
	public $head;
	public $tail;

	function __construct()
	{
		$this->top = null;
		$this->head = null;
		$this->tail = null;
	}
	//This function are add new element into queue
	public	function enqueue($value)
	{
		//Create a dynamic node
		$node = new MyQueue($value);
		if ($node == null)
		{
			echo "Memory overflow\n";
		}
		else
		{
			if ($this->head == null)
			{
				//add first element into queue
				$this->head = $node;
				$this->tail = $node;
			}
			else
			{
				//add node at the end using tail pointer
				$this->tail->next = $node;
				$this->tail = $node;
			}
		}
	}
	//Delete a element into queue
	public	function dequeue()
	{
		$data = -1;
		if ($this->head == null)
		{
			echo "Empty Queue\n";
			return $data;
		}
		//Get the deleted node
		$temp = $this->head;
		$data = $temp->data;
		//visit to next node of queue
		$this->head = $this->head->next;
		if ($this->head == null)
		{
			//When deleting a last node of linked list
			$this->tail = null;
		}
		$temp = null;
		return $data;
	}
	// Add Queue element into the stack
	public	function push($node)
	{
		$new_node = new MyStack($node);
		if ($new_node != null)
		{
			$new_node->next = $this->top;
			$this->top = $new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	public	function pop()
	{
		if ($this->top != null)
		{
			$result = $this->top->element;
			$temp = $this->top;
			$this->top->element = null;
			$this->top = $this->top->next;
			$temp = null;
			return $result;
		}
		return null;
	}
	//Display all queue element
	public	function print_queue()
	{
		$temp = $this->head;
		while ($temp != null)
		{
			echo " ". $temp->data ." ";
			$temp = $temp->next;
		}
		echo "\n";
	}
	//This method are reverse the queue elements 
	public	function reverse()
	{
		$temp = null;
		//First add all queue elements into stack
		while ($this->head != null)
		{
			$temp = $this->head;
			// add current head node into stack
			$this->push($this->head);
			// visit to next upcoming node
			$this->head = $this->head->next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			$temp->next = null;
		}
		//add stack elements into the actual queue
		while ($this->top != null)
		{
			if ($this->head == null)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				$this->head = $this->pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				$this->tail = $this->head;
			}
			else
			{
				//Add new stack top element into queue tail section
				$this->tail->next = $this->pop();
				//make a new tail node
				$this->tail = $this->tail->next;
			}
		}
	}
}

function main()
{
	$obj = new Process();
	//Add queue elements
	$obj->enqueue(1);
	$obj->enqueue(2);
	$obj->enqueue(3);
	$obj->enqueue(4);
	$obj->enqueue(5);
	$obj->enqueue(9);
	$obj->enqueue(11);
	//Display all queue elements
	$obj->print_queue();
	$obj->reverse();
	//Display all queue elements
	$obj->print_queue();
}
main();

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
/*
	Node Js Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	//set new node value
	constructor(element)
	{
		this.data = element;
		this.next = null;
	}
}
class MyStack
{
	//set new node data
	constructor(element)
	{
		this.element = element;
		this.next = null;
	}
}
class Process
{
	constructor()
	{
		this.top = null;
		this.head = null;
		this.tail = null;
	}
	//This function are add new element into queue
	enqueue(value)
	{
		//Create a dynamic node
		var node = new MyQueue(value);
		if (node == null)
		{
			process.stdout.write("Memory overflow\n");
		}
		else
		{
			if (this.head == null)
			{
				//add first element into queue
				this.head = node;
				this.tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				this.tail.next = node;
				this.tail = node;
			}
		}
	}
	//Delete a element into queue
	dequeue()
	{
		this.data = -1;
		if (this.head == null)
		{
			process.stdout.write("Empty Queue\n");
			return data;
		}
		//Get the deleted node
		var temp = this.head;
		data = temp.data;
		//visit to next node of queue
		this.head = this.head.next;
		if (this.head == null)
		{
			//When deleting a last node of linked list
			this.tail = null;
		}
		temp = null;
		return data;
	}
	// Add Queue element into the stack
	push(node)
	{
		var new_node = new MyStack(node);
		if (new_node != null)
		{
			new_node.next = this.top;
			this.top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	pop()
	{
		if (this.top != null)
		{
			var result = this.top.element;
			var temp = this.top;
			this.top.element = null;
			this.top = this.top.next;
			temp = null;
			return result;
		}
		return null;
	}
	//Display all queue element
	print_queue()
	{
		var temp = this.head;
		while (temp != null)
		{
			process.stdout.write(" " + temp.data + " ");
			temp = temp.next;
		}
		process.stdout.write("\n");
	}
	//This method are reverse the queue elements 
	reverse()
	{
		var temp = null;
		//First add all queue elements into stack
		while (this.head != null)
		{
			temp = this.head;
			// add current head node into stack
			this.push(this.head);
			// visit to next upcoming node
			this.head = this.head.next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp.next = null;
		}
		//add stack elements into the actual queue
		while (this.top != null)
		{
			if (this.head == null)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				this.head = this.pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				this.tail = this.head;
			}
			else
			{
				//Add new stack top element into queue tail section
				this.tail.next = this.pop();
				//make a new tail node
				this.tail = this.tail.next;
			}
		}
	}
}

function main()
{
	var obj = new Process();
	//Add queue elements
	obj.enqueue(1);
	obj.enqueue(2);
	obj.enqueue(3);
	obj.enqueue(4);
	obj.enqueue(5);
	obj.enqueue(9);
	obj.enqueue(11);
	//Display all queue elements
	obj.print_queue();
	obj.reverse();
	//Display all queue elements
	obj.print_queue();
}
main();

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
# 	Python 3 Program
# 	Reverse a queue using stack

# Create structure of Queue
class MyQueue :
	
	# set new node value
	def __init__(self, element) :
		self.data = element
		self.next = None
	

class MyStack :
	
	# set new node data
	def __init__(self, element) :
		self.element = element
		self.next = None
	

class Process :
	
	def __init__(self) :
		self.top = None
		self.head = None
		self.tail = None
	
	# This function are add new element into queue
	def enqueue(self, value) :
		# Create a dynamic node
		node = MyQueue(value)
		if (node == None) :
			print("Memory overflow\n", end = "")
		else :
			if (self.head == None) :
				# add first element into queue
				self.head = node
				self.tail = node
			else :
				# add node at the end using tail pointer
				self.tail.next = node
				self.tail = node
			
		
	
	# Delete a element into queue
	def dequeue(self) :
		self.data = -1
		if (self.head == None) :
			print("Empty Queue\n", end = "")
			return data
		
		# Get the deleted node
		temp = self.head
		data = temp.data
		# visit to next node of queue
		self.head = self.head.next
		if (self.head == None) :
			# When deleting a last node of linked list
			self.tail = None
		
		temp = None
		return data
	
	#  Add Queue element into the stack
	def push(self, node) :
		new_node = MyStack(node)
		if (new_node != None) :
			new_node.next = self.top
			self.top = new_node
		
	
	#  This function are remove top node into stack and return 
	#  the queue element .
	#  Basically we are returns a value of data value but here added 
	#  a actual queue element into stack. 
	#  so return this node element
	def pop(self) :
		if (self.top != None) :
			result = self.top.element
			temp = self.top
			self.top.element = None
			self.top = self.top.next
			temp = None
			return result
		
		return None
	
	# Display all queue element
	def print_queue(self) :
		temp = self.head
		while (temp != None) :
			print(" ", temp.data ," ", end = "")
			temp = temp.next
		
		print("\n", end = "")
	
	# This method are reverse the queue elements 
	def reverse(self) :
		temp = None
		# First add all queue elements into stack
		while (self.head != None) :
			temp = self.head
			#  add current head node into stack
			self.push(self.head)
			#  visit to next upcoming node
			self.head = self.head.next
			#  Note that we are not delete queue element 
			#  so added element are hold next node information to queue 
			#  so remove next node information
			#  set nil
			temp.next = None
		
		# add stack elements into the actual queue
		while (self.top != None) :
			if (self.head == None) :
				#  pop a stack element
				#  And set that top queue element as first node of queue
				self.head = self.pop()
				#  Because that is first node of queue.
				#  So tail node is also hold the information of first node.
				self.tail = self.head
			else :
				# Add new stack top element into queue tail section
				self.tail.next = self.pop()
				# make a new tail node
				self.tail = self.tail.next
			
		
	

def main() :
	obj = Process()
	# Add queue elements
	obj.enqueue(1)
	obj.enqueue(2)
	obj.enqueue(3)
	obj.enqueue(4)
	obj.enqueue(5)
	obj.enqueue(9)
	obj.enqueue(11)
	# Display all queue elements
	obj.print_queue()
	obj.reverse()
	# Display all queue elements
	obj.print_queue()

if __name__ == "__main__": main()

Output

  1    2    3    4    5    9    11
  11    9    5    4    3    2    1
# 	Ruby Program
# 	Reverse a queue using stack

# Create structure of Queue
class MyQueue 

	# Define the accessor and reader of class MyQueue  
	attr_reader :data, :next
	attr_accessor :data, :next

	# set new node value
	def initialize(element)
	
		self.data = element
		self.next = nil
	end
end
class MyStack 

	# Define the accessor and reader of class MyStack  
	attr_reader :element, :next
	attr_accessor :element, :next

	# set new node data
	def initialize(element)
	
		self.element = element
		self.next = nil
	end
end
class ProcessRun 

	# Define the accessor and reader of class Process  
	attr_reader :top, :head, :tail
	attr_accessor :top, :head, :tail

	def initialize()
	
		self.top = nil
		self.head = nil
		self.tail = nil
	end
	# This function are add new element into queue
	def enqueue(value)
	
		# Create a dynamic node
		node = MyQueue.new(value)
		if (node == nil)
		
			print("Memory overflow\n")
		else
		
			if (self.head == nil)
			
				# add first element into queue
				self.head = node
				self.tail = node
			else
			
				# add node at the end using tail pointer
				self.tail.next = node
				self.tail = node
			end
		end
	end
	# Delete a element into queue
	def dequeue()
	
		@data = -1
		if (self.head == nil)
		
			print("Empty Queue\n")
			return data
		end
		# Get the deleted node
		temp = self.head
		data = temp.data
		# visit to next node of queue
		self.head = self.head.next
		if (self.head == nil)
		
			# When deleting a last node of linked list
			self.tail = nil
		end
		temp = nil
		return data
	end
	#  Add Queue element into the stack
	def push(node)
	
		new_node = MyStack.new(node)
		if (new_node != nil)
		
			new_node.next = self.top
			self.top = new_node
		end
	end
	#  This function are remove top node into stack and return 
	#  the queue element .
	#  Basically we are returns a value of data value but here added 
	#  a actual queue element into stack. 
	#  so return this node element
	def pop()
	
		if (self.top != nil)
		
			result = self.top.element
			temp = self.top
			self.top.element = nil
			self.top = self.top.next
			temp = nil
			return result
		end
		return nil
	end
	# Display all queue element
	def print_queue()
	
		temp = @head
		while (temp != nil)
		
			print(" ", temp.data ," ")
			temp = temp.next
		end
		print("\n")
	end
	# This method are reverse the queue elements 
	def reverse()
	
		temp = nil
		# First add all queue elements into stack
		while (self.head != nil)
		
			temp = self.head
			#  add current head node into stack
			self.push(self.head)
			#  visit to next upcoming node
			self.head = self.head.next
			#  Note that we are not delete queue element 
			#  so added element are hold next node information to queue 
			#  so remove next node information
			#  set nil
			temp.next = nil
		end
		# add stack elements into the actual queue
		while (self.top != nil)
		
			if (self.head == nil)
			
				#  pop a stack element
				#  And set that top queue element as first node of queue
				self.head = self.pop()
				#  Because that is first node of queue.
				#  So tail node is also hold the information of first node.
				self.tail = self.head
			else
			
				# Add new stack top element into queue tail section
				self.tail.next = self.pop()
				# make a new tail node
				self.tail = self.tail.next
			end
		end
	end
end
def main()

	obj = ProcessRun.new()
	# Add queue elements
	obj.enqueue(1)
	obj.enqueue(2)
	obj.enqueue(3)
	obj.enqueue(4)
	obj.enqueue(5)
	obj.enqueue(9)
	obj.enqueue(11)
	# Display all queue elements
	obj.print_queue()
	obj.reverse()
	# Display all queue elements
	obj.print_queue()
end
main()

Output

 1  2  3  4  5  9  11 
 11  9  5  4  3  2  1 
/*
	Scala Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue(var data: Int,
	var next: MyQueue)
{
	//set new node value
	def this(element: Int)
	{
		this(element,null);
	}
}
class MyStack(var element: MyQueue,
	var next: MyStack)
{
	//set new node data
	def this(element: MyQueue)
	{
		this(element,null);
	}
}
class Process(var top: MyStack,
	var head: MyQueue,
		var tail: MyQueue)
{
	def this()
	{
		this(null,null,null);
	}
	//This function are add new element into queue
	def enqueue(value: Int): Unit = {
		//Create a dynamic node
		var node: MyQueue = new MyQueue(value);
		if (node == null)
		{
			print("Memory overflow\n");
		}
		else
		{
			if (this.head == null)
			{
				//add first element into queue
				this.head = node;
				this.tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				this.tail.next = node;
				this.tail = node;
			}
		}
	}
	//Delete a element into queue
	def dequeue(): Int = {
		var data: Int = -1;
		if (this.head == null)
		{
			print("Empty Queue\n");
			return data;
		}
		//Get the deleted node
		var temp: MyQueue = this.head;
		data = temp.data;
		//visit to next node of queue
		this.head = this.head.next;
		if (this.head == null)
		{
			//When deleting a last node of linked list
			this.tail = null;
		}
		temp = null;
		return data;
	}
	// Add Queue element into the stack
	def push(node: MyQueue): Unit = {
		var new_node: MyStack = new MyStack(node);
		if (new_node != null)
		{
			new_node.next = this.top;
			this.top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	def pop(): MyQueue = {
		if (this.top != null)
		{
			var result: MyQueue = this.top.element;
			var temp: MyStack = this.top;
			this.top.element = null;
			this.top = this.top.next;
			temp = null;
			return result;
		}
		return null;
	}
	//Display all queue element
	def print_queue(): Unit = {
		var temp: MyQueue = head;
		while (temp != null)
		{
			print(" " + temp.data + " ");
			temp = temp.next;
		}
		print("\n");
	}
	//This method are reverse the queue elements 
	def reverse(): Unit = {
		var temp: MyQueue = null;
		//First add all queue elements into stack
		while (this.head != null)
		{
			temp = this.head;
			// add current head node into stack
			this.push(this.head);
			// visit to next upcoming node
			this.head = this.head.next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp.next = null;
		}
		//add stack elements into the actual queue
		while (this.top != null)
		{
			if (this.head == null)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				this.head = this.pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				this.tail = this.head;
			}
			else
			{
				//Add new stack top element into queue tail section
				this.tail.next = this.pop();
				//make a new tail node
				this.tail = this.tail.next;
			}
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var obj: Process = new Process();
		//Add queue elements
		obj.enqueue(1);
		obj.enqueue(2);
		obj.enqueue(3);
		obj.enqueue(4);
		obj.enqueue(5);
		obj.enqueue(9);
		obj.enqueue(11);
		//Display all queue elements
		obj.print_queue();
		obj.reverse();
		//Display all queue elements
		obj.print_queue();
	}
}

Output

 1  2  3  4  5  9  11
 11  9  5  4  3  2  1
/*
	Swift Program
	Reverse a queue using stack
*/
//Create structure of Queue
class MyQueue
{
	var data: Int;
	var next: MyQueue? ;
	//set new node value
	init(_ element: Int)
	{
		self.data = element;
		self.next = nil;
	}
}
class MyStack
{
	var element: MyQueue? ;
	var next: MyStack? ;
	//set new node data
	init(_ element: MyQueue? )
	{
		self.element = element;
		self.next = nil;
	}
}
class Process
{
	var top: MyStack? ;
	var head: MyQueue? ;
	var tail: MyQueue? ;
	init()
	{
		self.top = nil;
		self.head = nil;
		self.tail = nil;
	}
	//This function are add new element into queue
	func enqueue(_ value: Int)
	{
		//Create a dynamic node
		let node: MyQueue? = MyQueue(value);
		if (node == nil)
		{
			print("Memory overflow\n", terminator: "");
		}
		else
		{
			if (self.head == nil)
			{
				//add first element into queue
				self.head = node;
				self.tail = node;
			}
			else
			{
				//add node at the end using tail pointer
				self.tail!.next = node;
				self.tail = node;
			}
		}
	}
	//Delete a element into queue
	func dequeue() -> Int
	{
		var data: Int = -1;
		if (self.head == nil)
		{
			print("Empty Queue\n", terminator: "");
			return data;
		}
		//Get the deleted node
		var temp: MyQueue? = self.head;
		data = temp!.data;
		//visit to next node of queue
		self.head = self.head!.next;
		if (self.head == nil)
		{
			//When deleting a last node of linked list
			self.tail = nil;
		}
		temp = nil;
		return data;
	}
	// Add Queue element into the stack
	func push(_ node: MyQueue? )
	{
		let new_node: MyStack? = MyStack(node);
		if (new_node != nil)
		{
			new_node!.next = self.top;
			self.top = new_node;
		}
	}
	// This function are remove top node into stack and return 
	// the queue element .
	// Basically we are returns a value of data value but here added 
	// a actual queue element into stack. 
	// so return this node element
	func pop() -> MyQueue?
	{
		if (self.top != nil)
		{
			let result: MyQueue? = self.top!.element;
			self.top!.element = nil;
			self.top = self.top!.next;
			return result;
		}
		return nil;
	}
	//Display all queue element
	func print_queue()
	{
		var temp: MyQueue? = self.head;
		while (temp != nil)
		{
			print(" ", temp!.data ," ", terminator: "");
			temp = temp!.next;
		}
		print("\n", terminator: "");
	}
	//This method are reverse the queue elements 
	func reverse()
	{
		var temp: MyQueue? = nil;
		//First add all queue elements into stack
		while (self.head != nil)
		{
			temp = self.head;
			// add current head node into stack
			self.push(self.head);
			// visit to next upcoming node
			self.head = self.head!.next;
			// Note that we are not delete queue element 
			// so added element are hold next node information to queue 
			// so remove next node information
			// set nil
			temp!.next = nil;
		}
		//add stack elements into the actual queue
		while (self.top != nil)
		{
			if (self.head == nil)
			{
				// pop a stack element
				// And set that top queue element as first node of queue
				self.head = self.pop();
				// Because that is first node of queue.
				// So tail node is also hold the information of first node.
				self.tail = self.head;
			}
			else
			{
				//Add new stack top element into queue tail section
				self.tail!.next = self.pop();
				//make a new tail node
				self.tail = self.tail!.next;
			}
		}
	}
}
func main()
{
	let obj: Process = Process();
	//Add queue elements
	obj.enqueue(1);
	obj.enqueue(2);
	obj.enqueue(3);
	obj.enqueue(4);
	obj.enqueue(5);
	obj.enqueue(9);
	obj.enqueue(11);
	//Display all queue elements
	obj.print_queue();
	obj.reverse();
	//Display all queue elements
	obj.print_queue();
}
main();

Output

  1    2    3    4    5    9    11
  11    9    5    4    3    2    1




Comment

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