// 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());
}
}
Monday, October 13, 2014
Implement Queue using doubly linkedlist
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment