Monday, October 13, 2014

Implement Queue using doubly linkedlist

// Implementation of Queue using doubly linkedlist


class QNode{
 int val;
 QNode next, prev;
 
 public QNode(int val)
 {
  this.val = val;
  this.next = this.prev = null;
 }
 
}

class Queue{
 
 private QNode front, rear, middle;
 private int count;

 void enqueue(int d)
 {
  QNode node = new QNode(d);
  count++;
  if(isEmpty())
  {
   front = rear = middle = node;
  }else{
   rear.next = node;
   node.prev = rear;
   rear = rear.next;
   if((count&1) == 1) middle = middle.next;
   
  }
   
 }
 
 
 int dequeue()
 {
  int r = -1;
  if(!isEmpty())
  {
   if(front == rear)
   {
    r = front.val;
    front = rear = middle = null;
    count--;
   }else{
    r = front.val;
    front = front.next;
    count--;
   }
   
   if((count & 1) != 0 && middle != null) 
   {
    middle = middle.next;
    }
  }
  return r;
 }
 
 int middleElement()
 {
  if(!isEmpty())
   return middle.val;
  return -1;
 }
 
 void deleteElement()
 {
  
  if(middle.prev == null && front != null)
  {
   System.out.println("Deleted:"+middle.val);
   front = front.next;
   if(front != null){
    front.prev = null;
    middle = front;
   }
   count--;
  }else     
  if(middle != null)
  {
   System.out.println("Deleted:"+middle.val);
   middle.prev.next = middle.next;
   middle.next.prev = middle.prev;
   count--;
   if((count & 1) != 0 && middle != null) //odd
   {
    middle = middle.next;
   }else
   {
    middle = middle.prev;
   }
  }
 }
 
 
 boolean isEmpty()
 {
  if(front == null) return true;
  return false;
 }
 
 
 public static void main(String args[])
 {
  Queue q = new Queue();
  q.enqueue(2);
  q.enqueue(5);
  q.enqueue(6);
  q.enqueue(8);
  
  //System.out.println(q.middleElement());
  q.deleteElement();
  q.deleteElement();
  q.deleteElement();
  q.deleteElement();
  System.out.println(q.middleElement());
 }
 
}

No comments:

Post a Comment