Variablenzuordnung von Elementen aus verketteter Liste
-
Ich habe eine verkettete Liste mit n Elementen. Die Elemente werden aus einer Datei eingelesen. Das läuft soweit.
Wie bekomme ich es hin, dass in meiner Endloschleife bei jedem Durchlauf der Wert des einen bestimmten Elements in ein anderes Element geschrieben wird.Statisch würde das so aussehen:
int var1, var2, var3, var4; while (1){ var1=var2; var4=var3; }
Das ganze soll jetzt dynamisch sein. Also ist es nicht sicher, dass var2 nach var1 geschrieben wird, sondern var3 oder var4 kann auch nach var1 geschrieben werden. Und die Anzahl der Kopiervorgänge ist auch variabel.
Die Anweisung welche Variable wohin geschrieben werden soll, will ich auch aus einer Datei einlesen. Die Idee die ich habe ist eine Art Taskliste mit Arbeitsaufträgen die auch wieder in einer verketteten Liste stehen:(Zielvariable,Quellvariable,Zeiger_zum_nächsten_Element)-->
(Zielvariable,Quellvariable,Zeiger_zum_nächsten_Element)-->EndeDazu folgendes Beispiel:
while (1){ while (Liste nicht zu Ende){ ElementX.Zielvariable=ElementX.Quellvariable; gehe zum nächsten Element der Liste; } }
Haltet ihr das so wie vorgeschlagen für machbar? Oder habt ihr eine andere Idee, wie man das machen könnte?
Bin für jede Hilfe dankbar.
-
Das Problem an verketteten Listen ist, dass man nicht schnell auf Listenelemente mit einem bestimmten Index zugreifen kann; wenn man den Wert des 42sten Elements haben will, muss man die Liste auch bis dorthin durchiterieren.
Man kann natürlich trotzdem jederzeit auf beliebige Elemente in der Liste zugreifen, wenn man Zeiger darauf hat. Die Einträge in deiner "Taskliste" müssten also Zeiger auf die Quell- und die Zielvariable enthalten. Das geht aber nicht, wenn die Taskliste aus einer Datei gelesen werden soll.
Am besten nimmt du statt einer verketteten Liste einfach ein Array.
-
Ok, dass mit dem Array kling logsch. Die Variablen sind ja gleich lang. Ich werde es jetzt so probieren.
Eine Frage zur Verketteten Liste habe ich aber noch:
[quote]Man kann natürlich trotzdem jederzeit auf beliebige Elemente in der Liste zugreifen, wenn man Zeiger darauf hat.[/quote]
Wo bekomme ich die Zeiger bei einer verketten Liste denn her. Müsste ich die Zeiger beim Hinzufügen eines Elements zu der Liste in einem Array ablegen? Wie soll ich sonst die Zeiger wissen?
-
pathfinder09 schrieb:
Wo bekomme ich die Zeiger bei einer verketten Liste denn her. Müsste ich die Zeiger beim Hinzufügen eines Elements zu der Liste in einem Array ablegen?
Ja entweder so, oder du gehst nach dem Einlesen aller Elemente nochmal die Liste von vorne bis hinten durch und speicherst die Zeiger in ein Array. Das ist sinnvoll, wenn du erst nach Einlesen der Liste weißt, wie viele Elemente sie hat und wie groß das Array sein muss. (das heißt, du kannst mit einem einzelnen malloc-Aufruf das Array in der richtigen Größe erzeugen und musst es nicht eventuell während des Einlesens mit realloc vergrößern).