Πέμπτη, Απρίλιος 16, 2026

Προγραμματιστικά η διπλοουρά υλοποιείται ως εξής:

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