myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

[Anfänger] Zeigeranweisungen bei verkettete Liste

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 28.01.14, 16:02   #1
kaka18
Erfahrener Newbie
 
Registriert seit: Jul 2010
Beiträge: 144
Bedankt: 43
kaka18 ist noch neu hier! | 0 Respekt Punkte
Standard [Anfänger] Zeigeranweisungen bei verkettete Liste

Hallo,

kurze Noob Frage...ich komm einfach nicht selber drauf. Ich bin grad in der Nachbereitung eines Moduls (Sprache in Modul ist C) und in meinen Notizen steht unter anderem folgendes:

Wir haben eine verkettete Liste (jedes Element besteht aus 2 Teilen, einmal der Inhalt und der next-Zeiger aufs nächste Element):

(a|next) -> (b|next) -> (c|next)

Wenn wir jetzt ein (d|next) zwischen a und b setzen wollen, machen wir folgendes:

d.next = b
a.next = d

ABER das soll nicht funktionieren :
(wurde in Vorlesung 100% gesagt, aber ich weiß den Grund einfach nicht mehr)
a.next = d
d.next = b


Die Reihenfolge ist hier zu beachten, aber warum nur? Warum funktioniert die 2. variante nicht?
kaka18 ist offline   Mit Zitat antworten
Ungelesen 28.01.14, 17:49   #2
mona_lisa
Eskapistin
 
Benutzerbild von mona_lisa
 
Registriert seit: Apr 2009
Beiträge: 2.745
Bedankt: 3.573
mona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punktemona_lisa leckt gerne myGully Deckel in der Kanalisation! | 16340117 Respekt Punkte
Standard

Naja, das wird ja Zeile für Zeile abgearbeitet und bei einer einfach verketteten Liste muss jedes Element immer eine Referenz auf seinen Nachfolger kennen, wobei der Wert NULL das Ende einer Liste darstellt.
Im zweiten Fall wäre in der ersten Zeile der "Zustand": a.next = d, d.next=NULL (bzw. kennt keinen Nachfolger) und damit die Liste zu ende. Alles weitere würde "verloren gehen".
Ist jetzt nicht so fachlich ausgedrückt von mir, aber ich hoffe trotzdem verständlich ^^
mona_lisa ist offline   Mit Zitat antworten
Ungelesen 28.01.14, 18:07   #3
cortez442
Nur der Hamburger SV
 
Benutzerbild von cortez442
 
Registriert seit: Oct 2009
Beiträge: 476
Bedankt: 293
cortez442 ist unten durch! | -165 Respekt Punktecortez442 ist unten durch! | -165 Respekt Punkte
Standard

Du musst dir nur vor Augen führen, was die Liste eigentlich ist: Eine Aneinanderreihung von Zeigern auf Speicheradressen. Dazu hat jedes Element noch einen Zeiger auf den Nachfolger. Im Ausgangszustand gibt es bei A einen Zeiger auf B und bei B einen Zeiger auf C.

Jetzt nimmst du also das next Element von A, welches vorher auf B gezeigt hat und änderst das Ziel auf D. Meine Frage: Wie findest du jetzt das Element B? Richtig, gar nicht mehr, weil zu den Zeiger, der eigentlich auf B zeigen sollte, auf D umbiegst. Du hast als Anhaltspunkt ja lediglich dein Startelement, die anderen bauen stück für Stück auf dieses auf. Durch deine Reihenfolge hast du jedoch die einzige Verbindung zerstört.

Bei der ersten Möglichkeit sieht die Sache schon wieder anders aus. Du erstellst zuerst ein neues Element, welches du dann auf den Nachfolger seiner Einfügeposition zeigen lässt. Du hast in diesem Moment also 2 Elemente, welche beide auf B zeigen. Wenn du nun den Zeiger von A änderst, hast du immer noch den Zeiger von D, welcher weiterhin auf B zeigt und den Zusammenhang der Kette sichert.

Spätestens bei den Doppelt verketten Listen wirst du dankbar sein, dass du hier nochmal ran musstest. Die sind an sich nicht schwer, aber wenn du die Reihenfolge nicht drauf hast, bekommst du lustige Resultate (Und dein Arbeitsspeicher ist ziemlich schnell voll )
__________________
Ein Fehler ist aufgetreten: der Vorgang wurde erfolgreich ausgeführt.
cortez442 ist offline   Mit Zitat antworten
Ungelesen 28.01.14, 20:15   #4
kaka18
Erfahrener Newbie
 
Registriert seit: Jul 2010
Beiträge: 144
Bedankt: 43
kaka18 ist noch neu hier! | 0 Respekt Punkte
Standard

Vielen vielen Dank euch beiden (besonders dir cortez442) für die super! Erklärungen

Habs jetzt endlich wieder verstanden.^^
kaka18 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr.


Sitemap

().