3 3.1 Elementare Datenstrukturen Lineares Feld Benachbarte Elemente stehen im Speicher direkt nebeneinander. Der Zugri auf das i-te Element erfolgt in konstanter Zeit: A[i] in O(1). Falls nicht anders angegeben, nehmen wir hier in der Vorlesung die Gröÿe n des Feldes als gegeben an. 3.2 Lineare Liste Benachbarte Elemente sind miteinander verkettet. Die Datenstruktur eignet sich besonders, wenn die Länge in vorhinein nicht bekannt ist. Die Verkettung erfolgt durch Pointer auf die Nachfolger. Es existieren die Funktionen NACH(p), VOR(p) und WERT(p) um auf das nachfolgende, das vorhergehende Elemente oder den Wert direkt zuzugreifen. Weiters gibt es die Möglichkeit die Liste doppelt zu verketten. 3.3 Stapel (Stack) Der Stapel ist ein spezielles lineares Feld, bei dem das Einfügen und Entfernen nur an der Spitze erlaubt ist. Dadurch wird die LIFO-Strategie (last-in, rst-out) implementiert. Die Funktionen STAPEL_LEER, PUSH und POP werden verwendet um zu überprüfen, ob der Stapel leer ist, um ein Element auf den Stapel zu werfen bzw. vom Stapel S zu entfernen. 1 STAPEL_LEER(S) 1: IF t=0 2: RETURN TRUE 3: ELSE FALSE PUSH (S,x) 1: IF t=n THEN 'overflow' 2: ELSE 3: t←t+1 4: S[t]←x POP (S) 1: IF STACK_LEER THEN 'underflow' 2: ELSE 3: x←S[t] 4: t←t-1 Alle Operationen benötigen nur O(1) Zeit! Anwendung: Abarbeiten von Rekursionen, umkehren einer Reihenfolge, Umwandlung von Inx-Ausdrücken in Postx-Ausdrücken,... 3.4 Schlange (Queue) Implementiert die FIFO-Strategie (rst-in, rst-out). Die Schlange Q verwendet die Funktionen PUT und GET, um Werte in die Schlange zu schreiben und sie wieder auszulesen. PUT (Q,x) 1: IF anzahl=n THEN 'overflow' 2: ELSE 3: anzahl←anzahl+1 4: IF ende<n THEN ende←ende+1 5: ELSE ende←1 6: Q[ende]←x GET (Q) 1: IF anzahl=0 THEN 'underflow' 2: ELSE 3: anzahl←anzahl-1 4: x←Q[anfang] 5: IF anfang<n THEN anfang←anfang+1 6: ELSE anfang←1 7: RETURN x Alle Operationen benötigen O(1) Zeit! 2