interface QueueADT<E>
{
void enqueue(E data);
E dequeue();
E peek();
int size();
boolean isEmpty();
void traverse();
}
class CyclicQueue
{
public static void main(String args[])
{
Integer[] arr=new Integer[5];
MyQueue<Integer> queue=new MyQueue<>(arr);
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
queue.traverse();
Integer deleted=queue.dequeue();
if(deleted!=null)
{
System.out.println("Deleted element:"+deleted);
}
else
{
System.out.println("Queue underflow.");
}
deleted=queue.dequeue();
if(deleted!=null)
{
System.out.println("Deleted element:"+deleted);
}
else
{
System.out.println("Queue underflow.");
}
queue.enqueue(100);
queue.enqueue(200);
queue.enqueue(300);
queue.enqueue(400);
queue.enqueue(500);
queue.traverse();
}
}
class MyQueue<E> implements QueueADT<E>
{
private E[] arr;
private int rear;
private int front;
private int size;
public MyQueue(E[] arr)
{
this.arr=arr;
rear=0;
front=0;
size=0;
}
public void enqueue(E data)
{
if(size!=arr.length)
{
//cyclic behavior
if(rear==arr.length)
{
rear=0;
}
arr[rear]=data;
rear++;
size++;
}
else
{
System.out.println("Queue is overflow.");
}
}
public E dequeue()
{
E response=null;
if(!isEmpty())
{
if(size!=arr.length)
{
if(front==arr.length)
{
front=0;
}
}
response=arr[front];
front++;
size--;
}
else
{
System.out.println("Queue is underflow");
}
return response;
}
public int size()
{
return size;
}
public boolean isEmpty()
{
if(size==0)
{
return true;
}
else
{
return false;
}
}
public E peek()
{
E response=null;
if(!isEmpty())
{
response=arr[front];
}
return response;
}
// cyclic queue traverse method
public void traverse()
{
System.out.println("Printing Queue :");
System.out.print("front"+"<---");
if(rear<=front)
{
//front to length
for(int i=front; i<arr.length; i++)
{
System.out.print(" "+arr[i]+"<---");
}
//zero to rear
for(int i=0; i<rear; i++)
{
System.out.print(arr[i]+"<---");
}
}
else
{
for(int i=front; i<rear; i++)
{
System.out.print(arr[i]+"<---");
}
}
System.out.println("rear");
}
}
0 Comments