6.2 Schlangen Repräsentationen: - Feld, zyklisch benutzt (Längenbeschränkung) - lineares Geflecht, einfach verkettet - zyklisches Geflecht, einfach verkettet Anwendungen: - Prozeßverwaltung (im Betriebssystem) Ressourcenverwaltung allgemein Verwaltung „realer“ Warteschlangen Simulation zeitdiskreter Systeme Baum- und Graph-Traversierung 6.3 Imperative Listen = beliebig manipulierbare Folgen mit Positionen 0,1,2,... Repräsentationen: Feld Felder wechselnder Größe zyklisches, doppelt verkettetes Geflecht Anwendungen: Simulation zeitdiskreter Systeme Repräsentation „höherer“ ADT (z.B. Doppelkopfschlange, Mengen, ...) Java-Bibliothek java.util: class Vector repräsentiert durch Felder wechselnder Größe Object elementAt(int pos) throws ArrayIndexOutOfBoundsException void setElementAt(Object obj, int pos) throws ArrayIndexOutOfBoundsException void insertElementAt ... ... class Stack extends Vector (Collections Framework:) interface Collection interface List extends Collection ..... class ArrayList implements List (ähnlich wie Vector) class LinkedList implements List (doppelt verkettet) ..... 6.4 Zeichenketten (Java-Bibliothek java.lang:) class String konstante Objekte („immutable objects“), als Bytefolgen repräsentiert class StringBuffer veränderlich (ähnlich Vector) 6.5 Traversieren von Folgen = Durchlaufen aller Elemente einer Folge (oder Menge oder ...) z.B. „alle Mitarbeiter erhalten 3% Gehaltserhöhung“ funktional einfach, z.B. map f l = [ f x | x<-l ] map :: (a->b) -> [a] -> [b] foldl :: (a->b->a) -> a -> [b] -> a filter :: (a->Bool) -> [a] -> [a] ..... imperativ: ohne Datenabstraktion, z.B. Traversieren eines Feldes mit public static <T> void map(Function<T> f, T[] a) { for(int i=0; i++<a.length; ) a[i] = f.call(a[i]); } Externe Iteratoren zum Traversieren abstrakter Folgen (unterstützt durch java.util) Interne Iteratoren zum abstrakten Traversieren abstrakter Folgen