Das sollte recht einfach über eine rekursive Funktion machbar sein.
Du hast 2 Listen: Output und toPrint.
Output ist leer, toPrint ist die Liste der Elemente. Dann schreibst du eine Funktion, die im Endeffekt folgendes prüft:
Hat das Element keine Abhängigkeit? Dann gib das Element aus (sofern es noch nicht ausgegeben wurde)
Hat das Element eine Abhängigkeit? Gib erst die Abhängigkeit aus, dann das Element. - immer sofern es noch nicht ausgegeben wurde.
Code:
printElement(element):
toPrint.remove(element)
ist element ohne Anhängigkeiten?
wenn element nicht in Output
Output.add(element)
return
sonst // Element ist sowas wie A = B
Abhängigkeit = parseAbhängigkeit(element); // parseAbhängigkeit würde bei (A = B) B zurückgeben.
if output.contains(abhängigkeit) then
return; // bereits ausgegeben
if !toPrint.contains(abhängigkeit) then
// FEHLER: zyklische Abhängigkeit
printElement(findeElement(B)); // findeElement findet B in der Liste, und gibt B oder B = ... zurück, je nach dem was in der Liste steht.
Output.add(element);
Wenn du dann
Code:
while (toPrint.size > 0)
printElement(toPrint.get(0))
aufrufst, ist in Output die sortierte Liste. Der Sauberkeithalber sollte man toPrint und Output als Parameter übergeben und nicht global definieren.
Wenn du mehr als 1 Abhängigkeit hast (bspw. A = B, C) dann gibt parseAbhängigkeit eine Liste zurück, über die Iteriert werden muss. Sonst ändert sich eig. nichts.
Und noch ne Anmerkung: Keine Garantie dass das funktioniert - reines Kopfkonstrukt.