290 likes | 401 Views
Verkettete Liste. Visualisierung. New-Operator. Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden Vorteil:
E N D
Verkettete Liste Visualisierung
New-Operator • Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden • Vorteil: • Es wird lediglich der benötigte Speicherplatz reserviert und nicht beispielsweise über ein Feld (unnötig) viel oder zu wenig Speicherplatz reserviert • Man kann den Speicher wieder freigeben, ohne die Speicherorganisation zu zerstören (Destruktoren machen zum ersten Mal Sinn) • Objekte können als Pointer angelegt werden • Einfacher als in der strukturierten Programmiersprache C (dort mit malloc und calloc und free)
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *start = NULL Das Programm wird gestartet Auto *ende = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Button wird geklickt Auto *start = NULL Auto *ende = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Auto *start = NULL Mit dem New-Operator wirdein neues Objekt angelegt Auto *ende = NULL Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Auto *start = NULL Wenn *start = Null ist, Setze *start und *ende auf das neue Objekt Auto *ende = NULL Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Auto *start Das ist der Fall Auto *ende Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Button wird geklickt Pointer auf nächstes Objekt Auto *next Auto *temp Auto *start Auto *ende Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto * Mit dem New-Operator wirdein neues Objekt angelegt Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Wenn *start = Null ist, Setze *start und *ende auf das neue Objekt Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Das ist nicht der Fall Hersteller Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Hersteller Jetzt tritt der else-Fall in Kraft Typ Farbe KW / PS Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende setze den Pointer *ende->next auf *temp Hersteller Typ Farbe KW / PS Auto *next
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Setzte den Pointer *ende auf *temp Hersteller Typ Farbe KW / PS Auto *next
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Button wird geklickt Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Hersteller Typ Farbe KW / PS Auto *next
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Mit dem New-Operator wirdein neues Objekt angelegt Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Wenn *start = Null ist, Setze *start und *ende auf das neue Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Das ist aber nicht der Fall. Also tritt wieder der else-Fall in Kraft Hersteller Typ Auto *start Farbe KW / PS Auto *next = NULL Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS setze den Pointer *ende->next auf *temp Pointer auf nächstes Objekt Auto *next Auto *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Setzte den Pointer *ende auf *temp Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Und so würde es weiter gehen.Ein neues Objekt würde angelegt werden durch Klicken des Buttons. *temp zeigt auf das neue Objekt.Die Pointer würden wie zuvorver- bzw. umgebogen werden. Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Folgende Erweiterungsmöglichkeiten wären denkbar.1. Erweiterung der Klasse mit dem Pointerprevious (vorheriger Knoten)(Hier rot dargestellt) Auto *prev Pointer auf vorheriges Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Eine weitere Erweiterungsmöglichkeit wäre danach: Ein Löschen einzelner Knoten Pointer auf nächstes Objekt Auto *next Auto *temp Auto *prev Pointer auf vorheriges Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Pointer auf nächstes Objekt Auto *next Auto *temp Der gelb dargestellte Knoten soll gelöscht werden.Was muss alles geprüft werden?Welche Pointer müssen verbogen werden ? Auto *prev Pointer auf vorheriges Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Hersteller Eine weitere Erweiterungsmöglichkeit wäre danach: Ein Einfügen eines Knoten an eine bestimmte Stelle. Hier grün eingefärbt. Pointer auf nächstes Objekt Auto *next Typ Auto *temp Auto *prev Pointer auf vorheriges Objekt Farbe KW / PS Hersteller Auto *next Typ Auto *start Auto *prev Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Eine weitere Erweiterungsmöglichkeit wäre danach: Das Ändern der Nutzdaten eines Knoten an eine bestimmte Stelle. Hier grün eingefärbt. Pointer auf nächstes Objekt Auto *next Auto *temp Auto *prev Pointer auf vorheriges Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Klasse Auto Hersteller Typ Nutzdaten Lege neues Objekt an Farbe KW / PS Eine weitere Erweiterungsmöglichkeit wäre danach: Das Tauschen zweier Knoten bzw. derer Knoten Hier grün eingefärbt. Pointer auf nächstes Objekt Auto *next Auto *temp Auto *prev Pointer auf vorheriges Objekt Hersteller Typ Auto *start Farbe KW / PS Auto *next Auto *prev Auto *ende Hersteller Hersteller Typ Typ Farbe Farbe KW / PS KW / PS Auto *next Auto *next = NULL = NULL Auto *prev Auto *prev
Erweiterungsmöglichkeiten • Sortierstartpointer • Sortierendepointer • Sortierpreviouspointer in der Klasse • Sortiernextpointer in der Klasse