verkettete Liste

Gast #417563
Lesenswert?
• ▲
▼
Hallo ihr,

ich habe in C eine einfach verkettete Liste programmiert. Jedes
Listenelement beinhaltet unter anderem den Index des jeweiligen
Elements (als INT-Wert). Wenn ich nun ein neues Element in der Mitte
der Liste einfüge,  müssen sich ja die Indizes aller darauffolgender
Listenelemente um 1 erhöhen.

Bei mir sieht das so aus wenn ich an der stelle 1 ein Element einfüge
und die Liste ausgebe:

vorher:
Index
0
1
2
3
4
...

nachher:
0
1
1
2
3
4..


Wie könnte man das am besten programmieren?

Vielen Dank schon mal im Voraus!!
Gast #417564
Lesenswert?
• ▲
▼
Na, du hast doch sicher noch einen Zeiger, der auf das neue Element
zeigt. Von da aus klapperst du die Liste bis zum Ende ab und erhöhst
die Indizes ODER du hast eine Laufvariable, die den Index mitzählt und
weißt den Elementen die entsprechende Nummer zu.
Gast #417566
Lesenswert?
• ▲
▼
komische verkettete Liste...
Eigentlich sollte jedes Element die Adresse des folgenden Elements
haben.
So kann man nämlich die Elemente einfach (unsortiert) in einer Tabelle
ablegen, und braucht nur den Folgeindex des vorhergehenden Elements in
der Liste verändern. (wirr?)
#417567
Lesenswert?
• ▲
▼
> hab nur gedacht es gibt was eleganteres

Nochmal drüber nachdenken ob du den Index überhaupt brauchst.
Macht nur Arbeit beim Einfügen, Löschen und Umsortieren.

Für den Fall, dass man den Index tatsächlich irgendwo mal
braucht, kann man ihn sich ganz einfach vorübergehend erzeugen,
indem man durch die komplette Liste huscht und den Elementen
die Indexnummer erst dann durchzählt. Ist eine Anwendung
des 'Lazy Evaluation' Prinzips: "mache eine Arbeit erst dann
wenns nicht mehr anders geht". Wozu aufwändig einen Index
bei jeder Listenänderung mitführen, wenn ich das Erstellen
des Index auch solange vertagen kann, bis ich den Index auch
wirklich brauche.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren