Προγραμματιστικά η διπλοουρά υλοποιείται ως εξής:
public class Dequeue
{
DNode head, rear; // Οι γνωστοί κόμβοι - οριοθέτες
int size; // Πλήθος στοιχείων
public Dequeue() // Αρχικοποίηση
{
head=new DNode(null, null, null); // Οι γνωστές αρχικοποιήσεις
rear=new DNode(head, null, null); // Το τέλος δείχνει την κορυφή
head.setNext(rear); // Η κορυφή δείχνει το τέλος
size=0;
}
public boolean is Empty()
{
return (size < 1);
}
public Item pop()
{
if (isEmpty())
{
System.out.println("Η διπλοουρά είναι κενή");
return null;
}
DNode first=head.getNext(); // Ο πρώτος κόμβος
DNode second=first.getNext(); // Ο δεύτερος κόμβος
head.setNext(second); // Ο δεύτερος κόμβος γίνεται πρώτος
second.setPrev(head);
first.setNext(null); // Γείωση
first.setPrev(null); // Γείωση
size--; // Προσαρμογή του μεγέθους
return first.getItem(); // Επιστροφή του στοιχείου της παλιάς κεφαλής
}
public void push(Item o)
{
DNode second=head.getNext(); // Ο κορυφαίος κόμβος που θα γίνει δεύτερος
DNode first=new DNode(head, second, o); // Ο νέος κορυφαίος κόμβος
second.setPrev(first); // Ο νέος δεύτερος κόμβος προς τον νέο πρώτο κόμβο
head.setNext(first); // Η κορυφή προς τον πρώτο κόμβο
size++; // Προσαρμογή του μεγέθους
}
public Item eject()
{
if (isEmpty())
{
System.out.println("Η διπλοουρά είναι κενή");
return null;
}
DNode last=rear.getPrev(); // Ο τελευταίος κόμβος
DNode secondToLast=last.getPrev(); // Ο δεύτερος κόμβος πριν το τέλος
rear.setPrev(secondToLast); // Ο δεύτερος κόμβος πριν το τέλος γίνεται τελευταίος
secondToLast.setNext(rear);
last.setPrev(null); // Γείωση
last.setNext(null); // Γείωση
size--; // Προσαρμογή του μεγέθους
return last.getItem(); // Επιστροφή του στοιχείου του παλιού τέλους
}
public void inject(Item o)
{
DNode secondToLast=rear.getPrev(); // Ο τελευταίος κόμβος που θα γίνει προτελευταίος
DNode last=new DNode(secondToLast, rear, o); // Ο νέος τελευταίος
secondToLast.setNext(last); // Ο νέος προτελευταίος κόμβος πριν τον νέο τελευταίο κόμβο
rear.setPrev(last); // Η ουρά πριν τον νέο τελευταίο κόμβο
size++; // Προσαρμογή του μεγέθους
}
public Item first() // Ανάκτηση, δίχως αφαίρεση, του κορυφαίου στοιχείου
{
if (isEmpty())
{
System.out.println("Η διπλοουρά είναι κενή");
return null;
}
return head.getNext().getItem();
}
public Item last() // Ανάκτηση, δίχως αφαίρεση, του τελευταίου στοιχείου
{
if (isEmpty())
{
System.out.println("Η διπλοουρά είναι κενή");
return null;
}
return rear.getPrev().getItem();
}
} // Τέλος Dequeue