Einzelnen Beitrag anzeigen

Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 16:26
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.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat