with Ada.Text_IO;
use Ada.Text_IO;
package body Search_Trees is
procedure Create (Anchor : in out Ref_Cell)
is
begin
Anchor := null;
end Create;
-- Suchen ob es das gleiche Element schon gibt Ergebnis gibt aus ob es etwas
-- gefunden hat;
function Search (Anchor : Ref_Cell; Eingabe : Ref_Cell) return Boolean
is
Zeiger1 : Ref_Cell;
Gefunden : Boolean := False;
NGefunden : Boolean := False;
Ergebnis : Boolean := False;
Vergleich : Integer := 0;
begin
Zeiger1 := Anchor;
if Zeiger1 /= null then
while Gefunden = False or NGefunden = False loop
if Zeiger1.Inhalt < Eingabe.Inhalt then
if Zeiger1.Right /= null then
Zeiger1 := Zeiger1.Right;
else
NGefunden := True;
end if;
Vergleich := Vergleich + 1;
else
if Zeiger1.Left /= null then
Zeiger1 := Zeiger1.Left;
else
NGefunden := True;
end if;
Vergleich := Vergleich + 1;
end if;
if Zeiger1.Inhalt = Eingabe.Inhalt then
Gefunden := True;
end if;
end loop;
end if;
NGefunden := True;
if Gefunden = True then
Ergebnis := True;
end if;
Put ("Anzahl der benoetigten Vergleiche : " & Vergleich'Img);
return Ergebnis;
end Search;
-- Sucht nach der Stelle wo man das Zusaetzliche Element einfuegen kann und
-- fuegt es ein wenn es das Element noch nicht gibt;
procedure Insert (Anchor : in out Ref_Cell; Eingabe : Ref_Cell)
is
Eingesetzt : Boolean := False;
Ergebnis : Boolean := False;
Zeiger1 : Ref_Cell;
Vergleich : Integer := 0;
begin
Zeiger1 := Anchor;
if Zeiger1 /= null then
Ergebnis := Search (Anchor, Eingabe);
if Ergebnis = False then
while Eingesetzt = False loop
if Zeiger1.Inhalt < Eingabe.Inhalt then
if Zeiger1.Right /= null then
Zeiger1 := Zeiger1.Right;
else
Zeiger1.Right := Eingabe;
Eingesetzt := True;
end if;
Vergleich := Vergleich + 1;
else
if Zeiger1.Left /= null then
Zeiger1 := Zeiger1.Left;
else
Zeiger1.Left := Eingabe;
Eingesetzt := True;
end if;
Vergleich := Vergleich + 1;
end if;
end loop;
end if;
else
Zeiger1 := Eingabe;
end if;
Anchor := Zeiger1;
Put ("Anzahl der Vergleiche zum Einfuegen: " & Vergleich'Img);
end Insert;
procedure BaumH (Anchor : Ref_Cell)
is
Zeiger1 : Ref_Cell;
ZeigerPrev : Ref_Cell;
begin
Zeiger1 := Anchor;
while Zeiger1.Left /= null loop
ZeigerPrev := Zeiger1;
Zeiger1 := Zeiger1.Left;
Hoehe1 := HoeheH + 1;
end loop;
Zeiger1 := ZeigerPrev;
Hoehe2 := Hoehe1;
if Zeiger1.Right /= null then
Zeiger1 := Zeiger1.Right;
while Zeiger1 /= null loop
ZeigerPrev := Zeiger1;
Zeiger1 := Zeiger1.Left;
Hoehe2 := Hoehe2 + 1;
end loop;
else
-- noch nicht fertig... überlegung wie man den baum absucht..das nach der while schleife verbessern!!
null;
end if;
end Search_Trees;