PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::AVLTreeAlgorithm Klassenreferenz

Implementierung des AVL-Algorithmus für binäre Bäume. Mehr ...

Basisklasse für ppl7::AVLTree< int, ppl7::grafix::Sprite::SpriteIndexItem > [private], ppl7::AVLTree< int, ppl7::grafix::Sprite::SpriteTexture > [private], ppl7::AVLTree< ppl7::AssocArray::ArrayKey, ppl7::AssocArray::ValueNode > [private], ppl7::AVLTree< ppl7::String, ppl7::grafix::FontFile * > [private] und ppl7::AVLTree< K, T > [private].

Klassen

class  Iterator
 Iterator zum Durchwandern eines AVL-Baums mit der Klasse AVLTreeAlgorithm. Mehr ...
 
class  Node
 Verwaltungsstruktur für einen Knoten des AVL-Baums. Mehr ...
 

Öffentliche Methoden

 AVLTreeAlgorithm ()
 Konstruktor. Mehr ...
 
virtual ~AVLTreeAlgorithm ()
 Destruktor. Mehr ...
 
void addNode (Node *item)
 Element hinzufügen. Mehr ...
 
void allowDupes (bool allow)
 Duplikate erlauben. Mehr ...
 
void clear ()
 Baum als leer kennzeichnen. Mehr ...
 
virtual int compare (const Node &value1, const Node &value2) const
 Zwei Elemente des Baums vergleichen. Mehr ...
 
size_t count () const
 Anzahl Knoten im Baum. Mehr ...
 
void eraseNode (Node *item)
 Element aus dem AVL-Baum entfernen. Mehr ...
 
NodefindNode (const Node *value) const
 Wert im Baum finden. Mehr ...
 
NodegetCurrent (Iterator &it) const
 Aktuelles Element des Baums. Mehr ...
 
NodegetFirst (Iterator &it) const
 Erstes Element aus dem Baum. Mehr ...
 
NodegetLast (Iterator &it) const
 Letztes Element aus dem Baum. Mehr ...
 
NodegetNext (Iterator &it) const
 Nächstes Element aus dem Baum. Mehr ...
 
NodegetPrevious (Iterator &it) const
 Vorheriges Element aus dem Baum. Mehr ...
 
NodegetRoot () const
 Basisknoten zurückgeben. Mehr ...
 
size_t num () const
 Anzahl Elemente im Baum. Mehr ...
 
 PPL7EXCEPTION (MissingCompareOperator, Exception)
 
void reset (Iterator &it) const
 Iterator auf erstes Element zurücksetzen Mehr ...
 

Private Methoden

Noderotate (Node *kn)
 Rotation druchführen. Mehr ...
 
void swapNodes (Node *item1, Node *item2)
 Zwei Knoten miteinander tauschen. Mehr ...
 
void upDelete (Node *node)
 Balance nach Löschen eines Knotens wiederherstellen. Mehr ...
 
void upInsert (Node *node)
 Knoten einfügen und Balance herstellen. Mehr ...
 

Private Attribute

bool dupes
 
size_t numElements
 
Noderoot
 Pointer auf die Wurzel des Baums. Mehr ...
 

Ausführliche Beschreibung

Beschreibung:
Diese Klasse enthält die Implementierung des AVL-Algorithmus für binäre Bäume. Alle Elemente sind dabei stets sortiert und der Baum ist ausgewogen. Sie dient als Basis für die Template-Klasse AVLTree.
Die Klasse kann von einer Anwendung nicht direkt verwendet werden. Da der zu verwaltende Datentyp nicht bekannt ist, muss zunächst eine Ableitung erstellt werden und die Vergleichsfunktion AVLTreeAlgorithm::compare reimplementiert werden.
Achtung
Die Klasse verwaltet weder Speicher noch hat sie einenen Mutex. Die Anwendung muss sich also selbst um Speicher und Threadsicherheit kümmern.

Beschreibung der Konstruktoren und Destruktoren

ppl7::AVLTreeAlgorithm::AVLTreeAlgorithm ( )
Beschreibung:
Im Konstruktor wird der Baum mit NULL initialisiert.
ppl7::AVLTreeAlgorithm::~AVLTreeAlgorithm ( )
virtual
Beschreibung:
Der Destruktor hat gegenwärtig keine Funktion, da die Klasse selbst keinen Speicher verwaltet.

Dokumentation der Elementfunktionen

void ppl7::AVLTreeAlgorithm::addNode ( Node item)
Beschreibung:
Diese Funktion fügt ein neues Element in den Baum ein. Dabei ist sichergestellt, dass der Baum stets sortiert und ausgewogen ist. Im Gegensatz zu CTree erlaub AVLTreeAlgorithm auch mehrere Elemente mit dem gleichen Schlüssel. Dieses Feature muss jedoch explizit durch Aufruf der Funktion AVLTreeAlgorithm::AllowDupes aktiviert werden.
Parameter
[in]itemPointer auf den hinzuzufügenden Wert
Ausnahmebehandlung
EmptyDataExceptionWird geworfen, wenn der Parameter item auf NULL zeigt
DuplicateItemExceptionWird geworfen, wenn es bereits ein Element mit dem gleichen Schlüssel gibt
void ppl7::AVLTreeAlgorithm::allowDupes ( bool  allow)
Beschreibung:
Mit dieser Funktion kann festgelegt werden, ob Elemente mit gleichem Schlüssel im Baum erlaubt sind. Normalerweise ist dies nicht der Fall. Dabei gilt zu beachten, dass einige Funktionen möglicherweise unerwartet funktionieren. So wird AVLTreeAlgorithm::Find immer nur das erste Element finden können, ebenso AVLTreeAlgorithm::Delete oder AVLTreeAlgorithm::Remove.
Parameter
allowMit true werden Duplikate erlaubt, mit false nicht. Werden bei einem bereits gefüllten Baum nachträglich Duplikate verboten, hat dies keine Auswirkung auf bereits vorhandene Duplikate.
void ppl7::AVLTreeAlgorithm::clear ( )
Beschreibung:
Durch Aufruf dieser Funktion wird der AVL-Baum als leer gekennzeichnet, das heisst der Basisknoten root zeigt auf NULL und der Elementzähler wird auf 0 gesetzt. Die aufrufende Funktion ist dafür verantwortlich, dass der durch den Baum belegte Speicher freigegeben wird.
int ppl7::AVLTreeAlgorithm::compare ( const Node value1,
const Node value2 
) const
virtual
Beschreibung:
Damit Elemente sortiert in den Baum eingehangen werden können, muss eine Möglichkeit bestehen zwei Elemente zu vergleichen. Dies wird mit dieser Methode realisiert. Da jeder Baum andere Daten enthalten kann, muss die Methode für jeden Datentyp reimplementiert werden, was innerhalb des Templates AVLTree auch erfolgt.
Parameter
[in]value1Pointer auf das erste Element.
[in]value2Pointer auf das zweite Element.
Rückgabe
Die Funktion muss einen der folgenden 3 Werte zurückliefern:
  • 0: Ist der Wert in value2 identisch mit value1, muss 0 zurückgegeben werden.
  • +1: Ist der Wert in value2 größer als der Wert in value1, muss +1 zurückgegeben werden
  • -1: Ist der Wert in value2 kleiner als der Wert in value1, muss -1 zurückgegeben werden
Ausnahmebehandlung
AVLTreeAlgorithm::MissingCompareOperatorWird geworfen, wenn keine Vergleichsoperatoren implementiert wurden. Bei Verwendung der Template-Klasse AVLTree kann dies nicht vorkommen.
Achtung
Beim Vergleich zweier Strings kann die Funktion strcmp nicht direkt verwendet werden, da sie laut Definition Werte kleiner oder größer 0 liefert, aber nicht exakt -1 oder +1.
Beispiel:
Beispiel für eine Implementierung:
class MyItem : public ppl7::AVLTreeAlgorithm::Node
{
public:
MyItem(const char *name) {
Name=name;
}
ppl7::CString Name;
};
class MyTree : public ppl7::AVLTreeAlgorithm
{
public:
~MyTree() {
Clear();
}
virtual int compare(const Node &value1, const Node &value2) const
{
const MyItem &v1=static_cast<const MyItem&>(value1);
const MyItem &v2=static_cast<const MyItem&>(value2);
if (v1.Name<v2.Name) return -1;
if (v1.Name>v2.Name) return 1;
return 0;
}
}

Erneute Implementation in ppl7::AVLTree< K, T >, ppl7::AVLTree< ppl7::AssocArray::ArrayKey, ppl7::AssocArray::ValueNode >, ppl7::AVLTree< int, ppl7::grafix::Sprite::SpriteIndexItem >, ppl7::AVLTree< ppl7::String, ppl7::grafix::FontFile * > und ppl7::AVLTree< int, ppl7::grafix::Sprite::SpriteTexture >.

size_t ppl7::AVLTreeAlgorithm::count ( ) const

Anzahl Elemente im Baum.

Beschreibung:
Diese Funktion liefert die Anzahl Elemente im Baum zurück.
Rückgabe
Anzahl Elemente, bzw. 0, wenn der Baum leer ist.
void ppl7::AVLTreeAlgorithm::eraseNode ( Node item)
Beschreibung:
Diese Funktion löscht das angegebene Element item aus dem Baum. Dabei ist sichergestellt, dass der Baum stets sortiert und ausgewogen ist.
Mit dieser Funktion wird das Element nur aus dem AVL-Baum entfernt, der durch das Element belegte Speicher wird jedoch nicht freigegeben. Dafür ist die aufrufende Funktion zuständig.
Parameter
[in]itemPointer auf den zu entfernenden Knoten
Ausnahmebehandlung
NullPointerExceptionWird geworfen, wenn item auf NULL zeigt
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::findNode ( const Node value) const
Beschreibung:
Mit dieser Funktion wird der Wert value innerhalb des Baums gesucht und dessen Baumelement (TREEITEM) zurückgegeben.
Parameter
[in]valueDer zu suchende Wert
Rückgabe
Wird der Wert im Baum gefunden, gibt die Funktion einen Pointer auf den Wert des Baum-Elements zurück. Falls nicht, wird NULL zurückgegeben.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getCurrent ( Iterator it) const
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das aktuelle Element des Baums zurückgeliefert. Dabei wird der Pointer nicht verändert.
Parameter
itIterator
Rückgabe
Pointer auf das aktuelle Element des Baums oder NULL, wenn kein Element mehr vorhanden ist.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getFirst ( Iterator it) const
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das erste Element des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Pointer auf das erste Element des Baums oder NULL, wenn der Baum leer ist
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getLast ( Iterator it) const
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das letzte Element des Baums zurückgeliefert.
Parameter
itIterator
Rückgabe
Pointer auf das letzte Element des Baums oder NULL, wenn der Baum leer ist
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getNext ( Iterator it) const
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das nächste Element des Baums zurückgeliefert. Somit kann der Baum sortiert vorwärts durchwandert werden.
Parameter
itIterator
Rückgabe
Pointer auf das nächste Element des Baums oder NULL, wenn keine weiteren Elemente vorhanden sind.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getPrevious ( Iterator it) const
Beschreibung:
Mit dieser Funktion wird ein Pointer auf das vorherige Element des Baums zurückgeliefert. Somit kann der Baum sortiert rückwärts durchwandert werden.
Parameter
itIterator
Rückgabe
Pointer auf das vorherige Element des Baums oder NULL, wenn keine weiteren Elemente vorhanden sind.
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::getRoot ( ) const
Beschreibung:
Diese Funktion liefert einen Pointer auf den Basisknoten (root) des Baumes zurück.
Rückgabe
Pointer auf Basisknoten oder NULL, wenn der Baum leer ist
size_t ppl7::AVLTreeAlgorithm::num ( ) const
Beschreibung:
Diese Funktion liefert die Anzahl Elemente im Baum zurück.
Rückgabe
Anzahl Elemente, bzw. 0, wenn der Baum leer ist.
ppl7::AVLTreeAlgorithm::PPL7EXCEPTION ( MissingCompareOperator  ,
Exception   
)
void ppl7::AVLTreeAlgorithm::reset ( Iterator it) const
Beschreibung:
Durch Aufruf dieser Funktion wird der angegebene Iterator it zurückgesetzt. Wird als nächstes AVLTreeAlgorithm::getNext aufgerufen, wird das erste Element des Baumes zurückgegeben, bei Aufruf von AVLTreeAlgorithm::getPrevious das letzte.
Parameter
itIterator
AVLTreeAlgorithm::Node * ppl7::AVLTreeAlgorithm::rotate ( Node kn)
private
Beschreibung:
Ein Knoten wird rotiert, um die Balance wieder herzustellen
Parameter
knKnoten, der routiert werden soll
Rückgabe
Pointer auf Kindknoten
void ppl7::AVLTreeAlgorithm::swapNodes ( Node item1,
Node item2 
)
private
Beschreibung:
Zwei AVL-Knoten werden miteinander vertauscht
Parameter
item1Pointer auf ersten Knoten
item2Pointer auf zweiten Knoten
void ppl7::AVLTreeAlgorithm::upDelete ( Node node)
private
Beschreibung:
Mit dieser Funktion wird die Balance des Baums nach dem Löschen eines Knotens wiederhergestellt.
Parameter
nodeZu löschender Knoten
void ppl7::AVLTreeAlgorithm::upInsert ( Node node)
private
Beschreibung:
Ein Knoten wird in den AVL-Baum eingefügt und bei Bedarf die Balance wiederhergestellt.
Parameter
nodeNeuer Knoten

Dokumentation der Datenelemente

bool ppl7::AVLTreeAlgorithm::dupes
private
size_t ppl7::AVLTreeAlgorithm::numElements
private
ppl7::AVLTreeAlgorithm::root
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: