package kapitel_03 /** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 3, Daten und ihre Struktur * * @author A. Gogol-Döring, Th. Letschert */ object AuD_03_03_FListPTR_App extends App { /* * Scala ist keine Sprache für die Systemprogrammierung. Zeiger sind darum kein Sprachelement. * Um den Algorithmus zu implementieren nutzen wir unser Wissen über die von Java übernommene * Referenz-Semantik von Scala aus, nach der alle nicht-primitiven Komponenten einer Datenstruktur * über Zeiger (Referenzen) eingebunden werden. */ type Ptr = Cell case class Cell(v: Int, var n: Ptr) def FList(n: Int): Ptr = { var l: Ptr = null var f: Int = 1 for (i <- 1 to n) { l = Cell(f, l) f = f * i } l } def FListAE(n: Int): Ptr = { var a: Ptr = null var e: Ptr = null for (i <- 0 to n) if (i == 0) { a = Cell(1, null) e = a } else { val t = Cell(e.v*i, null) e.n = t e = t } a } var ptr = FList(10) while (ptr != null) { println(ptr.v) ptr = ptr.n } println() ptr = FListAE(10) while (ptr != null) { println(ptr.v) ptr = ptr.n } }