Felder und Listen SS12
Aus ProgrammingWiki
Listen
Eine Liste ist eine Datenstruktur. Beim deren Initialisierung die Anzahl der Listenelemente nicht bekannt ist. Listenelemente sind durch Zeiger auf ein oder mehrere benachbarte Elemente mit einander verkettet. Die Struktur einer Liste ist linear.
Beispiel
Einkaufsliste
Ein einfaches Beispiel ist die Einkaufsliste. Auf Ihr sind die alle Lebensmittel untereinander aufgeschrieben. Dabei stellen die Lebensmittel die Listenelemente dar.
Einkaufszettel | --> | Liste "Einkaufszettel" |
Gurke | --> | Listenelement "Gurke" |
Tomate | --> | Listenelement "Tomate" |
Brot | --> | Listenelement "Brot" |
Käse | --> | Listenelement "Käse" |
Funktionen für die Einkaufsliste
Hat man beim Schreiben des Einkaufszettels etwas vergessen so kann man dies an jeder beliebigen Stelle des Zettel dazu schreiben. Auch wenn ein Lebensmittel zu viel auf der Liste steht, kann dies an jeder beliebigen Position entfernt werden. Auch kann die Reihenfolge der Lebensmittel auf der Liste beliebig verändert werden.
Einfach verkettete Listen
Wenn man eine solchen Einkaufszettel von oben nach unten Abarbeiten möchte, dabei nicht zurück springen muss, dann biete sich dafür eine einfach-verkettete-Liste an.
theoretischer Ansatz für einfach-verkettete-Listen
Die einfach-verkettete-Liste besteht aus einzelnen Listenelementen. Diese wiederum bestehen aus dem Inhalt des Elements und einem Verweis auf das nachfolgende Element. Damit man beim Zugreifen auf die Liste weis wo das erste Element liegt, wird ein leeres "Kopfelement" eingefügt welches nur den Zeiger auf das erste Element speichert. Wenn die Liste leer ist, dann verweist das Kopfelement auf "null".
Ein Listenelement kann wie folgt repräsentiert werden.
Die einfach-verkettete-Liste kann wie folgt umgesetzt werden. Diese Klasse stellt die Basis für alle anderen Funktionen für einfach-verkettete-Listen dar. Zusätzlich ist in der Basisklasse noch eine Funktion zum Ausgeben aller Listenelement enthalten.
Damit wäre der grundlegende Aufbau einer einfach-verketteten-Liste umgesetzt.
Funktionen für einfach-verkettete-Listen
Die grundlegende Funktionen einer solchen Liste sind das hinzufügen und löschen von Elementen. Dafür muss oft auf der erste beziehungsweise auf das letzte Element zugegriffen werden.
Kontrolle ob einfach-verkettete-Liste leer ist
Bevor eine Veränderung an der Liste vorgenommen wird, muss oft überprüft werden ob diese überhaupt einen Inhalt hat. Wenn der Zeiger des Kopfelements auf "null" zeigt ist die Liste leer
Zugriff auf das den Listenkopf für einfach-verkettete-Listen
Der Zugriff auf en Listenkopf erfolgt durch das zugreiffen auf die Klassenvariabel "kopf".
Zugriff auf das erste Element für einfach-verkettete-Listen
Der Zugriff auf das erste Element ist relativ einfach, denn der Zeiger des Kopfes verweist stets auf das erste Element. Zu vor muss nur geprüft werden ob die Liste überhaupt eine Element enthält.
Zugriff auf das letzte Element für einfach-verkettete-Listen
Der Zugriff auf das letzte Element ist Wesentlich aufwendiger, denn dafür muss die ganze Liste durchlaufen werden bis der Nachfolger des aktuellen Elements null ist.
Das Einfügen am Ende der Liste für einfach-verkettete-Listen
Das Hinzufügen am Ende der Liste erfolgt in 2 Schritten.
- Neues Element anlegen
- Der Zeiger vom bis dahin letzten Element von "null" auf das neue Element ändern
Das Einfügen am Anfang der Liste für einfach-verkettete-Listen
Das Hinzufügen am Anfang der Liste gestaltet sich etwas schwieriger, denn hierfür sind 4 Schritte nötig.
- Neues Listenelement mit dem übergebenen Inhalt erzeugt
- Zeiger vom Kopfelement auf das bis dahin erste Element zwischenspeichern
- Der Zeiger vom Kopfelement so ändern das er auf das neue Listenelement zeigt
- Der Zeiger des neuen Elements auf den zwischengespeicherten Wert anpassen.
Das Einfügen nach einer beliebigen Position für einfach-verkettete-Listen
Das einfügen nach einer beliebigen Stelle ähnelt stark dem Einfügen am Ende der Liste. Im Unterschied dazu wird statt die Liste bis zum letzten Element zu durchlaufen, die Liste nur bis zur angegebenen Position durchlaufen. Diese Position wird dann gespeichert außer dem wird seperat der Zeiger auf das nachfolgende Element gespeichert. Im Anschluss wird wieder ein neues Element mit dem übergebenen Daten generiert. Danach wird der Zeiger vom angegebenen Element so geändert das er auf das neue Element verweist. Abschließend wird der Zeiger vom neuen Element so motiviziert das er das selbe Ziel hat der zu vor zwischengespeicherte Zeiger.
Vereinheitlichung der Funktionen zum Einfügen für einfach-verkettete-Listen
Die Funktionen zum Einfügen am Anfang und am Ende der Liste sind bei genauerem betrachten nur Sonderfälle der Funktion "einfgNach". Daher kann man die Funktionen vereinheitlichen.
Die Funktion zum Einfügen am Anfang der Liste stellt das Einfügen nach dem Kopfelement der Liste dar.
Die Funktion zum Einfügen am Ende der Liste ist das Einfügen nach dem letzten Element der Liste.
Das Löschen eines Elements für einfach-verkettete-Listen
Das Löschen eines Elements erfolgt in 2 Schritten.
- Durchlaufen der Liste bis ein Elementgefunden wird dessen Nachfolger dem angegebenen Element entspricht.
- Ändern des Zeigers des Elements
Wenn das letzte Element der Liste gelöscht werden soll, dann muss der Zeiger auf "null" gesetzt werden. Sollte das zu entfernender Element einen Nachfolger haben, dann wird der Zeiger auf diesen geändert.
Das Löschen mehrere zusammenhängender Elemente für einfach-verkettete-Listen
Für das Löschen mehrerer zusammenhängender Element wird die Funktion zum löschen eines Elements erweitert. Als Übergabewerte wird als erste der Startwert, dann der Endwert angegeben.
- Speichern des Elements, dessen Nachfolger dem Startwert entspricht
- Speichern des Zeigers auf das Element, dass auf den Endwert folgt
- Anpassen des Zeigers vom Vorgänger des Startwertes so das dieser auf den Nachfolger des Endwertes zeigt
Hinweis: Die Listenelement werde nicht wirdklich gelöscht, es werden nur die Zeiger auf diese Element gelöscht.
Vereinheitlichung der Löschenfunktionen für einfach-verkettete-Listen
Auch hier stellt das einfache Löschen wieder einen Sonderfall der Funktion zum Löschen einem Abschnitt aus der Liste dar. Wenn man als Startwert und als Endwert den Wert, der beim einfachen Löschen übergeben wird verwendet, dann wird genau das eine Element gelöscht.
Außerdem lassen sich auf diese Weise 2 Sonderfälle abwickeln.
Zum einen das Löschen des ersten Elements. Dabei wird über die Funktion zum Holen des ersten Elements das erste Element ermittelt und als Start- und Endwert übergeben an die Funktion zum Löschen eines Abschnittes aus der Liste.
Ganz ähnlich geht man beim Löschen des letzten Elements der Liste vor. Dabei ruft man über die Funktion holeletzteElement das Letzte Element ab und übergibt diese wieder an die Funktion.
Leeren einer Liste für einfach-verkettete-Listen
Auch das leeren der Liste könnte man über die Löschfunktion erledigen durch die Übergabe des ersten und letzten Wertes. Einfach ist es aber einfach den Zeiger vom Kopfelement auf "null" zusetzten. Damit werden alle Verweise auf Listenelemente gelöscht.
Das Verschieben eines Elements für einfach-verkettete-Listen
Die Funktion zum Verschieben von einem Element hinter ein anderes Element lässt sich wie folgt realisieren und hat 7 Schritte. Dabei müssen folgende Wert übergeben werden: das Element was verschoben werden soll und das Element nach dem es eingefügt werden soll.
- Ermitteln des Elements dessen Nachfolger das zu verschiebende Element ist und Speichern in zB.: elementInhaltVorganger.
- Ermitteln des Elements das auf das zu verschiebende Element folgt und Speichern in zB.: elementInhaltNachfolger.
- Ermitteln des Elements nach dem eingefügt werden soll und Speichern in zB.: elementPosition.
- Ermitteln des Elements das auf das Element folgt nach dem der Wert eingefügt werden soll und Speichern in zB.: elementPositionNachfolger.
- Den Zeiger von elementInhaltVorganger so setzten das er auf elementInhaltNachfolger zeigt.
- Den Zeiger von elementPosition so ändern das er auf das zu verschiebende Element zeigt.
- Den Zeiger vom verschobenen Elment so anpassen das er auf elementPositionNachfolger verweist.
Das Verschieben mehrere zusammenhängender Elemente für einfach-verkettete-Listen
Die Funktion zum Verschieben von mehreren zusammenhängenden Elementen hinter ein anderes Element lässt sich wie folgt realisieren und hat 7 Schritte. Dabei müssen folgende Wert übergeben werden: das Startelement und das Endelement welche verschoben werden sollen und das Element nach dem sie eingefügt werden sollen.
- Ermitteln des Elements dessen Nachfolger das zuverschiebende Startelement ist und Speichern in zB.: elementStartVorganger.
- Ermitteln des Elements das auf das zu verschiebende Endelement folgt und Speichern in zB.: elementEndeNachfolger.
- Ermitteln des Elements nach dem eingefügt werden soll und Speichern in zB.: elementPosition.
- Ermitteln des Elements das auf das Element folgt nach dem der Wert eingefügt werden soll und Speichern in zB.: elementPositionNachfolger.
- Den Zeiger von elementStartVorganger so setzten das er auf elementEndeNachfolger zeigt.
- Den Zeiger von elementPosition so ändern das er auf das zu verschiebende Startelement zeigt.
- Den Zeiger vom verschobenen Endelment so anpassen das er auf elementPositionNachfolger verweist.
Vereinheitlichung der Verschiebefunktionen für einfach-verkettete-Listen
Auch hier lassen sich die Funktionen zum Verschieben wieder alle durch die Funktion verschiebeBlockNach realisieren.
Beim Verschieben von nur einem Element, wird einfach der Startwert und Endwert gleichgesetzt.
Beim Verschieben an den Anfang wird als Position der Listenkopf übergeben, der Rest wird je nach Bedarf genutzt.
Beim Verschieben an das Ende wird als Position das letzte Element übergeben, der Rest wird je nach Bedarf genutzt.
Doppelt verkettete Listen
Wenn beim Abarbeiten eines Einkaufszettel nicht nur von oben nach unten sondern auch anders herum, dann empfiehlt es eine doppelt-verkettete-Liste zu verwenden.
theoretischer Ansatz
Die doppelt-verkettete-Liste besteht aus einzelnen Listenelementen. Diese wiederum bestehen aus dem Inhalt des Elements und einem Verweis auf das nachfolgende Element und das vorausgegangene Element. Damit man beim Zugreifen auf die Liste weis wo das erste und das letzte Element liegt, wird ein leeres "Kopfelement" eingefügt welches nur den Zeiger auf das erste und das letzte Element speichert. Wenn die Liste leer ist, dann verweist das Kopfelement auf "null".
Ein Listenelement kann wie folgt repräsentiert werden.
Die doppelt-verkettete-Liste kann wie folgt umgesetzt werden. Diese Klasse stellt die Basis für alle anderen Funktionen für doppelt-verkettete-Listen dar. Zusätzlich ist in der Basisklasse noch eine Funktion zum Ausgeben aller Listenelement enthalten.
Damit wäre der grundlegende Aufbau einer doppelt-verketteten-Liste umgesetzt.
Funktionen
Die grundlegende Funktionen einer solchen Liste sind das hinzufügen und löschen von Elementen. Dafür muss oft auf der erste beziehungsweise auf das letzte Element zugegriffen werden.
Kontrolle ob doppelt-verkettete-Liste leer ist
Bevor eine Veränderung an der Liste vorgenommen wird, muss oft überprüft werden ob diese überhaupt einen Inhalt hat. Wenn der Zeiger vom Nachfolger des Kopfelements auf das Kopfelement zeigt ist die Liste leer
Zugriff auf das den Listenkopf der doppelt-verkettete-Liste
Der Zugriff auf en Listenkopf erfolgt durch das zugreiffen auf die Klassenvariabel "kopf".
Zugriff auf das erste Element der doppelt-verkettetet-Liste
Der Zugriff auf das erste Element ist relativ einfach, denn der Zeiger des Kopfes verweist stets auf das erste Element. Zu vor muss nur geprüft werden ob die Liste überhaupt eine Element enthält.
Zugriff auf das letzte Element von doppelt-verketteten-Listen
Der Zugriff auf das letzte Element ist genauso einfach. Der Zeiger vom Kopf auf den Vorgänger des Kopfes zeigt direkt auf das letzte Element.
Das Einfügen am Ende der doppelt-verketteten-Liste
Das Hinzufügen am Ende der Liste ist nun relativ einfach und kann in konstanter Zeit durchgeführt werden.
- Neues Element anlegen
- Der Zeiger vom Kopfelement auf das letzte Element so ändern das er auf das neue Element verweist und diesen dann erst auf das alte letzte Element verweist
- Der Zeiger vom bis dahin letzten Element so anpassen das er ebenfalls auf das neue Element verweist und dieses dann auf das Kopfelement
Das Einfügen am Anfang der doppelt-verketteten-Liste
Das Hinzufügen am Anfang der Liste gestaltet sich etwas schwieriger, denn hierfür sind 4 Schritte nötig.
- Neues Listenelement mit dem übergebenen Inhalt erzeugen
- Zeiger vom Kopfelement auf das bis dahin erste Element zwischenspeichern
- Der Zeiger vom Kopfelement so ändern das er auf das neue Listenelement zeigt und dieses dann auf das alte erste Element
- Der Zeiger vom alten ersten Element so ändern das dieser auf das neuen Elements verweist und diese Element dann auf das Kopfelement
Das Einfügen nach einer beliebigen Position in der doppelt-verketteten-Liste
- Liste bis zur angegebenen Position durchlaufen
- Position und Zeiger auf den Nachfolger speichern
- Neues Element mit dem übergebenen Daten generieren
- Den Zeiger vom angegebenen Element so ändern das er auf das neue Element verweist und dieses dann auf den alten Nachfolger der angegebenen Position
- Den Zeiger vom ehemaligen Nachfolger der angegebene Psoition so ändern das dieser auf das neuen Element und dieses auf die angegebene Position verweist
Vereinheitlichung der Funktionen zum Einfügen in eine doppelt-verkettete-Liste
Die Funktionen zum Einfügen am Anfang und am Ende der Liste sind bei genauerem betrachten nur Sonderfälle der Funktion "einfgNach". Daher kann man die Funktionen vereinheitlichen.
Die Funktion zum Einfügen am Anfang der Liste stellt das Einfügen nach dem Kopfelement der Liste dar.
Die Funktion zum Einfügen am Ende der Liste ist das Einfügen nach dem letzten Element der Liste.
Das Löschen eines Elements aus einer doppelt-verketteten-Liste
Das Löschen eines Elements erfolgt in 3 Schritten.
- Liste durchlaufen bis das angegebene Element gefunden wird
- Den Vorgänger und den Nachfolger zwischenspeichern
- Zeiger des Vorgängers auf den Nachfolger ändern
- Zeiger des Nachfolgers auf den Vorgänger ändern
Das Löschen mehrere zusammenhängender Elemente aus einer doppelt-verketteten-Liste
Für das Löschen mehrerer zusammenhängender Element wird die Funktion zum löschen eines Elements erweitert. Als Übergabewerte wird als erste der Startwert, dann der Endwert angegeben.
- Speichern des Vorgängers des Startwertes und des Nachfolger des Endwertes
- Zeiger des Vorgängers zeigt auf Nachfolger
- Zeiger des Nachfolgers zeigt auf Vorgänger
Hinweis: Die Listenelement werde nicht wirdklich gelöscht, es werden nur die Zeiger auf diese Element gelöscht.
Vereinheitlichung der Löschenfunktionen für eine doppelt-verkettete-Liste
Auch hier stellt das einfache Löschen wieder einen Sonderfall der Funktion zum Löschen einem Abschnitt aus der Liste dar. Wenn man als Startwert und als Endwert den Wert, der beim einfachen Löschen übergeben wird verwendet, dann wird genau das eine Element gelöscht.
Außerdem lassen sich auf diese Weise 2 Sonderfälle abwickeln.
Zum einen das Löschen des ersten Elements. Dabei wird über die Funktion zum Holen des ersten Elements das erste Element ermittelt und als Start- und Endwert übergeben an die Funktion zum Löschen eines Abschnittes aus der Liste.
Ganz ähnlich geht man beim Löschen des letzten Elements der Liste vor. Dabei ruft man über die Funktion holeletzteElement das Letzte Element ab und übergibt diese wieder an die Funktion.
Leeren einer doppelt-verketteten-Liste
Auch das leeren der Liste könnte man über die Löschfunktion erledigen durch die Übergabe des ersten und letzten Wertes. Einfach ist es aber einfach die Zeiger vom Kopfelement auf "kopf" zusetzten. Damit werden alle Verweise auf Listenelemente gelöscht.
Das Verschieben eines Elements in einer doppelt-verketteten-Liste
Die Funktion zum Verschieben von einem Element hinter ein anderes Element lässt sich wie folgt realisieren und hat 10 Schritte. Dabei müssen folgende Wert übergeben werden: das Element was verschoben werden soll und das Element nach dem es eingefügt werden soll.
- Speichern des Vorgängers des zu verschiebenden Elements in zB.: elementInhaltVorganger.
- Speichern des Nachfolgers des zu verschiebenden Elements in zB.: elementInhaltNachfolger.
- Speichern des Elements nach dem Eingefügt werden soll in zB.: elementPosition.
- Speichern des Elements des Nachfolgers von elementPosition in zB.: elementPositionNachfolger.
- Den Nachfolgerzeiger von elementInhaltVorganger so setzten das er auf elementInhaltNachfolger zeigt.
- Den Vorgängerzeiger von elementInhaltNachfolger so setzten das er auf elementInhaltVorganger zeigt.
- Den Nachfolgerzeiger von elementPosition so ändern das er auf das zu verschiebende Element zeigt.
- Den Vorgängerzeiger von dem zu verschiebenden Element s o ändern das er auf elementPosition zeigt.
- Den Nachfolgerzeiger vom verschobenen Elment so anpassen das er auf elementPositionNachfolger verweist.
- Den Vorgängererzeiger von elementPositionNachfolger anpassen so das er auf das zu verschiebende Elment verweist.
Das Verschieben mehrere zusammenhängender Elemente in doppelt-verkettete-Liste
Die Funktion zum Verschieben von mehreren zusammenhängenden Elementen hinter ein anderes Element lässt sich wie folgt realisieren und hat 10 Schritte. Dabei müssen folgende Wert übergeben werden: das Startelement und das Endelement welche verschoben werden sollen und das Element nach dem sie eingefügt werden sollen.
- Speichern des Vorgängers des zu verschiebenden Startelements in zB.: elementStartVorganger.
- Speichern des Nachfolgers des zu verschiebenden Endelements in zB.: elementEndeNachfolger.
- Speichern des Elements nach dem Eingefügt werden soll in zB.: elementPosition.
- Speichern des Elements des Nachfolgers von elementPosition in zB.: elementPositionNachfolger.
- Den Nachfolgerzeiger von elementStartVorganger so setzten das er auf elementEndeNachfolger zeigt.
- Den Vorgängerzeiger von elementEndeNachfolger so setzten das er auf elementStartVorganger zeigt.
- Den Nachfolgerzeiger von elementPosition so ändern das er auf das zu verschiebende Startelement zeigt.
- Den Vorgängerzeiger von dem zu verschiebenden Startelement so ändern das er auf elementPosition zeigt.
- Den Nachfolgerzeiger vom verschobenen EndElment so anpassen das er auf elementPositionNachfolger verweist.
- Den Vorgängererzeiger von elementPositionNachfolger anpassen so das er auf das zu verschiebende Endelement verweist.
Vereinheitlichung der Verschiebefunktionen für doppelt-verkettete-Listen
Auch hier lassen sich die Funktionen zum Verschieben wieder alle durch die Funktion verschiebeBlockNach realisieren.
Beim Verschieben von nur einem Element, wird einfach der Startwert und Endwert gleichgesetzt.
Beim Verschieben an den Anfang wird als Position der Listenkopf übergeben, der Rest wird je nach Bedarf genutzt.
Beim Verschieben an das Ende wird als Position das letzte Element übergeben, der Rest wird je nach Bedarf genutzt.
Vergleich der beiden Listentypen
Einfach- verkettete-Listen benötigen weniger Speicher als doppelt-verkettete-Listen, denn es muss pro Listenelement ein Zeiger weniger gespeichert werden.
einfach-verkettete-Liste | doppelt-verkettete-Liste | |
istLeer | konstante Zeit | konstante Zeit |
kopf() | konstante Zeit | konstante Zeit |
holeErstesElement() | konstante Zeit | konstante Zeit |
holeLetztesElement() | Laufzeit abhängig von der Anzahl der Listenelemente | konstante Zeit |
einfgStart() | konstante Zeit | konstante Zeit |
einfgEnde() | Laufzeit abhängig von der Anzahl der Listenelemente | konstante Zeit |
einfgNach() | Laufzeit abhängig von der Anzahl der Listenelemente | Laufzeit abhängig von der Anzahl der Listenelemente |
entf(), entferneBlock() | Laufzeit abhängig von der Anzahl der Listenelemente | Laufzeit abhängig von der Anzahl der Listenelemente |
entfAmAnfang() | konstante Zeit | konstante Zeit |
entfAmEnde() | Laufzeit abhängig von der Anzahl der Listenelemente | konstante Zeit |
verschiebe(), verschiebeBlockNach() | Laufzeit abhängig von der Anzahl der Listenelemente | Laufzeit abhängig von der Anzahl der Listenelemente |
verschiebeAnAnfang() | Laufzeit abhängig von der Anzahl der Listenelemente | Laufzeit abhängig von der Anzahl der Listenelemente |
verschiebeAnEnde() | Laufzeit abhängig von der Anzahl der Listenelemente | Laufzeit abhängig von der Anzahl der Listenelemente |
listeLeeren() | konstante Zeit | konstante Zeit |
Es zeigt sich das einfach-verkettete-Listen nur bei Funktionen am Anfang der Liste in konstanter Zeit arbeiten, alle anderen Funktionen sind von der Anzahl der Listenelement abhängig. Doppelt.verkettete-Listen arbeiten zusätzlich noch am Ende der Liste in konstanter Zeit.
Felder
Als Feld bezeichnet man eine Datenstruktur in der mehrere Variabeln vom gleichen Datentyp gespeichert sind. Der Zugriff erfolgt über Indices. Array liegen in einem bei ihrer Erzeugung festgelegten Speicherbereich. Die Indices verweisen daher von der Startadresse ausgehend auf den Speicherplatz des Elemets. Eindiemnsionale Array beteichnet man auch als Vektor. Zweidimensionale als Tabelle oder Matrix. Dabei gibt es keine Beschränkung wie viele Dimensionen ein Array maximal haben kann. Da Arrays eine der grundlegensten Datenstrukturen sind, sind sie in fast allen Programmiersprachen von Haus aus implementiert.
Beispiel für Felder
Wenn wir nun mit unserem Einkauf an die Kasse kommen wird dort vom Barcodescanner der Strickcode erfasst und in einen Wert umgewandelt. Dieser Wert sagt dem Kassensystem dann umwelches Element es sich handelt in der Warentabelle.
1. Dimension | 2. Dimension | Wert |
0 | 0 | Apfel |
0 | 1 | 1,50€ |
1 | 0 | Birne |
1 | 1 | 2,50€ |
2 | 0 | Kiwi |
2 | 1 | 0,80€ |
theoretischer Ansatz für Felder
Die Standard implementierung von Feldern reserviert beim erzeugen des Array eine festen Bereich im Speicher.
Wenn durch hinzufügen die Speicherobergrenze erreicht wird, dann kann kein weiteres Element hinzugefügt werden. Um trotzdem weitere Elemente speichern zu können muss dafür ein kleiner Trick begangen werden. Wenn die Obergrenze erreicht ist wird ein neues Feld erzeugt das 2 mal so viele Elemente speichern kann wie das alte Feld. Dann werden alle Elemente des alten Feldes in dem neue gespeichert und zwar an der selben Position. Danach wird dem alten Feld das neue Feld zugewiesen und der Speicher für das Erzeugen des erweiterten Array wieder freigegeben.
Funktionen für Felder
Kontrolle ob Feld leer ist
Wenn das Element mit dem Index "0" den Wert "0" hat, dann ist das Feld leer.
Zugriff auf das erste Element im Feld
Zugriff auf das Element mit dem Index "0".
Zugriff auf das letzte Element im Feld
Der Index des letzten Elementes ist entspricht der Anzahl der Element weniger 1.
Das Einfügen am Anfang des Feldes
- Anlegen eines neuen Feldes
- Einfügen des neue Elements in das neue Feld
- Alle Elemente des alten Feldes an das neue Feld am Einfügen mit einem versatz von 1
- Neues Feld auf altes Feld speichern
Das Einfügen nach einer beliebigen Position im Feld
- Alle Elemente nach der Position in einem 2. Feld zwischenspeichern
- Neues Element nach der Position einfügen
- Ausgelagerte Elemente mit einem Versatz von 1 wieder einfügen
Das Löschen eines Elements eines Feldes
Dafür müssen die alle Einträge nach dem zu löschenden Element um eine Indexposition nach vorne eingefügt werden. Das bis dahin letzte Element wird mit der Wertezuweisung "0" gelöscht
Leeren eines Feldes
Das Element mit dem Indxex "0" wird auf "0" gesetzt.
Das Verschieben eines Elements im Feld
- Das zu verschiebende Element wird zwischen gespeichert
- Element löschen
- Wenn das Element hinter seiner alte Position eingefügt werden soll, dann muss der Indexwert um 1 reduziert werden, sonst bleibt er gleich.
- Einfügen des zwischengespeicherten Elements nach dem angebenen und eventuell modifizeriten Indice
Vergleich von Listen und Feldern
Felder sind beim Zugriff über ein Indice wesentlich schnell als Listen. Der große Vorteil von Listen ist das effiziente Verändern der Reihenfolge in einer Liste ob durch Verschieben oder durch Einfügen.