Wir wollen also z.B. folgende Daten verwalten (Beispiel: CD-Verwaltung):
CD-Nummer (Word) CD-Titel (String, 40 Bytes) Gruppe (String, 40 Bytes)Da wir nicht wissen, wieviele CDs der Benutzer hat bzw. noch kaufen wird, sollte die Liste frei erweiterbar sein (ein Feld ist also hier ungeeignet).
Wie kriegen wir die obigen Daten nun so hin, daß wir sie frei erweitern können?
Nun gibt es in wohl so ziemlich jedem Betriebssystem Funktionen zum Belegen von neuen Speicherblöcken zur Laufzeit. Im GEMDOS sind dies Malloc() und Mfree() (auf die anderen Funktionen gehe ich hier nicht ein).
Diese Befehle wurden meist in die Programmiersprachen mit übernommen, so gibt es z.B. in C die Funktionen malloc(), der man die gewünschte Speichergröße übergibt und einen Zeiger auf den Speicherblock zurückbekommt, und die Funktion free(), die den Speicherblock wieder frei gibt.
Ein Zeiger ist (meist) ein long-Wert, der auf eine Speicherstelle 'zeigt', also die Speicheradresse beinhaltet. Wir können uns den zurückgelieferten Zeiger also bildlich so vorstellen:
Unsere C-Struktur sieht dann wie folgt aus:
typedef struct eintrag { int cd_nr; /* die CD-Nummer */ char titel[41], /* Der CD-Titel */ gruppe[41]; /* Die Gruppe */ struct eintrag *next; /* Zeiger auf den nächsten Eintrag */ } Eintrag;
Anmerkung: Die Zeichenketten haben jeweils noch ein Byte mehr zur Terminierung. In C wird jeder String durch ein Nullbyte beendet.Nun könnten wir also eine Liste erzeugen, indem wir in jedem neuen Block jeweils auf einen anderen verweisen:
Der nächste Abschnitt gibt uns die Möglichkeit, Einträge einzufügen.