L
Hallo!
ich stehe vor eigentlich genau dem gleichen Problem!
ich habe das hier mal soweit durchgelesen und bei mir funktioniert das ganze nur bis zu einem bestimmten punkt!
also ich habe eine Grundmenge:
{1,2,3,4,5,6,7,8,9,10}
die nur als integer wert dargestelt ist
int Element = 10;
und eine Menge die als Liste implementiert ist mit der gleichen Struktur wie Thes-One.
die zweite Menge ist bei mir: {1,2,5,8}
jetzt mache ich es so:
List get_invert(Set Ergebnis, Set A, int Element){ //<--- 10 zu anfang
if (l_rest(A) != NULL) // l_rest liefert immer die liste ohne das erste Element
get_invert(Ergebnis,l_rest(A),Element);
if (Element > l_kopf(A)) //l_kopf liefert das erste Element ohne den rest
Ergebnis = l_add(Element,Ergebnis); // l_add hängt fügt ein Element in die liste ein
get_invert(Ergebnis,A,--Element);
return Ergebnis;
}
So, die liste wird also von hinten durchlaufen und prüft immer ob das aktuelle Element größer ist als das aktuelle Element in der Liste A,
wenn ja dann soll das Element in die Ergebnisliste geschrieben werden.
das geht auch aber nur so lange das Aktuelle Element größer ist, sobald dieses kleiner oder gleich dem Element der Liste ist kann das ja nicht mehr funktionieren, da ich in der Liste ja nicht weiter absteige, aber wie mache ich das?
denn so wird ja das Element immer dekrementiert und ist dann ja immer kleiner als das Listenelement wenn da nicht weiter absteigt, somit gibts ne endlosschleife, bzw irgendwann einen Stack overflow...
kann mir da jemand helfen?
MFG
Luke