Queues in Java (#218)
* Clone linked list with random pointer * addition in reviewers list * Queues in Javapull/220/head
parent
916e0b1f37
commit
23dc7fc633
|
@ -5,3 +5,8 @@
|
|||
1. [Queue using linked list](c-or-cpp/queue-linked-list.cpp)
|
||||
2. [Circular Queue using linked list](c-or-cpp/circular-queue-linked-list.cpp)
|
||||
3. [Double Ended Queue (using arrays)](c-or-cpp/double-ended-queue-using-array.c)
|
||||
|
||||
### Java
|
||||
|
||||
1. [Queue using linked list](java/queue-linked-list.java)
|
||||
2. [Circular Queue using linked list](java/circular-queue-linked-list.java)
|
|
@ -0,0 +1,96 @@
|
|||
// Java program for insertion and
|
||||
// deletion in Circular Queue
|
||||
import java.util.*;
|
||||
|
||||
class Solution {
|
||||
|
||||
// Structure of a Node
|
||||
static class Node {
|
||||
int data;
|
||||
Node link;
|
||||
}
|
||||
|
||||
static class Queue {
|
||||
Node front, rear;
|
||||
}
|
||||
|
||||
// Function to create Circular queue
|
||||
static void enQueue(Queue q, int value)
|
||||
{
|
||||
Node temp = new Node();
|
||||
temp.data = value;
|
||||
if (q.front == null)
|
||||
q.front = temp;
|
||||
else
|
||||
q.rear.link = temp;
|
||||
|
||||
q.rear = temp;
|
||||
q.rear.link = q.front;
|
||||
}
|
||||
|
||||
// Function to delete element from Circular Queue
|
||||
static int deQueue(Queue q)
|
||||
{
|
||||
if (q.front == null) {
|
||||
System.out.printf("Queue is empty");
|
||||
return Integer.MIN_VALUE;
|
||||
}
|
||||
|
||||
// If this is the last node to be deleted
|
||||
int value; // Value to be dequeued
|
||||
if (q.front == q.rear) {
|
||||
value = q.front.data;
|
||||
q.front = null;
|
||||
q.rear = null;
|
||||
}
|
||||
else // There are more than one nodes
|
||||
{
|
||||
Node temp = q.front;
|
||||
value = temp.data;
|
||||
q.front = q.front.link;
|
||||
q.rear.link = q.front;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
// Function displaying the elements of Circular Queue
|
||||
static void displayQueue(Queue q)
|
||||
{
|
||||
Node temp = q.front;
|
||||
System.out.printf("\nElements in Circular Queue are: ");
|
||||
while (temp.link != q.front) {
|
||||
System.out.printf("%d ", temp.data);
|
||||
temp = temp.link;
|
||||
}
|
||||
System.out.printf("%d", temp.data);
|
||||
}
|
||||
|
||||
/* Driver of the program */
|
||||
public static void main(String args[])
|
||||
{
|
||||
// Create a queue and initialize front and rear
|
||||
Queue q = new Queue();
|
||||
q.front = q.rear = null;
|
||||
|
||||
// Inserting elements in Circular Queue
|
||||
enQueue(q, 14);
|
||||
enQueue(q, 22);
|
||||
enQueue(q, 6);
|
||||
|
||||
// Display elements present in Circular Queue
|
||||
displayQueue(q);
|
||||
|
||||
// Deleting elements from Circular Queue
|
||||
System.out.printf("\nDeleted value = %d", deQueue(q));
|
||||
System.out.printf("\nDeleted value = %d", deQueue(q));
|
||||
|
||||
// Remaining elements in Circular Queue
|
||||
displayQueue(q);
|
||||
|
||||
enQueue(q, 9);
|
||||
enQueue(q, 20);
|
||||
displayQueue(q);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
// Java program for linked-list implementation of queue
|
||||
|
||||
// A linked list (LL) node to store a queue entry
|
||||
class QNode {
|
||||
int key;
|
||||
QNode next;
|
||||
|
||||
// constructor to create a new linked list node
|
||||
public QNode(int key)
|
||||
{
|
||||
this.key = key;
|
||||
this.next = null;
|
||||
}
|
||||
}
|
||||
|
||||
// A class to represent a queue
|
||||
// The queue, front stores the front node of LL and rear stores the
|
||||
// last node of LL
|
||||
class Queue {
|
||||
QNode front, rear;
|
||||
|
||||
public Queue()
|
||||
{
|
||||
this.front = this.rear = null;
|
||||
}
|
||||
|
||||
// Method to add an key to the queue.
|
||||
void enqueue(int key)
|
||||
{
|
||||
|
||||
// Create a new LL node
|
||||
QNode temp = new QNode(key);
|
||||
|
||||
// If queue is empty, then new node is front and rear both
|
||||
if (this.rear == null) {
|
||||
this.front = this.rear = temp;
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the new node at the end of queue and change rear
|
||||
this.rear.next = temp;
|
||||
this.rear = temp;
|
||||
}
|
||||
|
||||
// Method to remove an key from queue.
|
||||
void dequeue()
|
||||
{
|
||||
// If queue is empty, return NULL.
|
||||
if (this.front == null)
|
||||
return;
|
||||
|
||||
// Store previous front and move front one node ahead
|
||||
QNode temp = this.front;
|
||||
this.front = this.front.next;
|
||||
|
||||
// If front becomes NULL, then change rear also as NULL
|
||||
if (this.front == null)
|
||||
this.rear = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Driver class
|
||||
public class Test {
|
||||
public static void main(String[] args)
|
||||
{
|
||||
Queue q = new Queue();
|
||||
q.enqueue(10);
|
||||
q.enqueue(20);
|
||||
q.dequeue();
|
||||
q.dequeue();
|
||||
q.enqueue(30);
|
||||
q.enqueue(40);
|
||||
q.enqueue(50);
|
||||
q.dequeue();
|
||||
System.out.println("Queue Front : " + q.front.key);
|
||||
System.out.println("Queue Rear : " + q.rear.key);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue