Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger."—  Präsentation transkript:

1 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz

2 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 2 Verkettete Liste Idee: Liste als Folge von Datenelementen. Jedes Element enthält einen Verweis auf das nachfolgende Element. Liste kann also beliebig lang werden. Rekursiver Datentyp: enthält Referenzvariablen vom selben Typ wie er selbst ist. (Nur bei Referenztypen möglich!) Datentyp für Listenelement: reftype Node = { int value Node next }

3 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 3 Verkettete Liste als ADT type List = { reftype Node = { int value Node next } Node first init() { first = null } append( int a) {... } } //Verwendung useList() { List myList myList.init().... myList.append( 10) } first myList first myList value: 10 next:

4 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 4 Elemente vorne einfügen insertFirst( int a) { Node n n = new Node// neues Element erzeugen n^.value = a// und initialisieren n^.next = first// Element vor das erste Element einhängen first = n// neues Element ist ab nun das erste Element } Bsp: myList.insertFirst( 199) myList.first value: 18 next: value: 13 next: n value: 199 next:

5 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 5 Elemente hinten anhängen appendLast( int a) { Node n // neuen Knoten erzeugen und initialisieren n = new Node n^.value = a; n^.next = null if (first == null) { // erstes Element wird eingefügt first = n } else { Node cur = first // Ende der Liste suchen while (cur^.next != null) { cur = cur^.next } // cur zeigt auf das letzte Element in der Liste (cur.next == null) cur.next = n } } Bsp: myList.appendLast( 199) myList.first value: 18 next: value: 13 next: n value: 199 next: cur

6 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 6 Liste vollständig löschen delete(){ Node next while (first != null) { next = first^.next // Referenz auf das nächste Element delete first// erstes Element der Liste löschen first = next// neues erstes Element der Liste } first = null }

7 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 7 Element sortiert einfügen insertSorted( int a) { Node n, cur, prev n = new Node n^.value = a cur = first prev = null // Position suchen while( cur!=null && cur^.value < a) prev = cur cur = cur^.next } // prev zeigt auf Element vor der Einfügeposition // Einfügen in der Mitte oder am Ende? if (prev != null){ prev^.next = n //Mitte: cur != null, Ende:cur == null n^.next = cur } // Einfügen am Beginn, oder die Liste ist leer else { first = n n^.next = cur // leere Liste: cur == null }

8 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 8 Zirkuläre Liste mit Sentinel Sonderfälle reduzieren Liste enthält immer ein Element (Sentinel) Letzte Element verweist auf das erste Element der Liste Datentyp und Initialisierung: type List = { reftype Node = { int value Node next } Node sentinel init() { sentinel = new Node sentinel ^.next = sentinel sentinel ^.value = 0 // Wert irrelevant! } value: 0 next: sentinel

9 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 9 Zirkuläre Liste mit Sentinel Sortiertes einfügen: insert(int a) { Node n, cur, prev n = new Node n^.value = a // Position suchen cur = sentinel ^.next prev = sentinel while( cur != sentinel && cur^.value < a) prev = cur cur = cur^.next } n^.next = cur prev^.next = n } beginne die Suche mit dem "1." Element mit gültigen Wert cur zeigt auf das Element hinter Einfügeposition (falls am Ende der Liste einzufügen ist, auf sentinel.) prev zeigt auf das Element vor der Einfügeposition (falls am Beginn der Liste einzufügen ist, auf sentinel).


Herunterladen ppt "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger."

Ähnliche Präsentationen


Google-Anzeigen