Vorbereitung: struct SX { int x; struct SX *p; } *px, *ph; px: Zeiger auf Listen- anfang ph: Hilfszeiger px = NULL; px zeigt auf leere Liste px
Listenaufbau 1: ph = (struct SX *)malloc(sizeof(struct SX)); ph: Zeiger auf neu erstellte Speicherzelle für ein Listenelement pxph xp
Listenaufbau 1: ph = (struct SX *)malloc(sizeof(struct SX)); px ph 5. ph x = 5 ; ph p = NULL; Belege Datenteil mit 5 und Zeigerteil mit NULL
Listenaufbau 1: ph = (struct SX *)malloc(sizeof(struct SX)); px ph 5. ph x = 5 ; ph p = NULL; px = ph; px zeigt auf Liste mit genau einem Element 5. px Listenzeiger zeigt auf neues Element
Listenaufbau 2: ph = (struct SX *)malloc(sizeof(struct SX)); ph: Zeiger auf zweites neues Listenelement ph. px 5. ph x = 2 ; ph p = NULL; Belege neues Element mit Daten: 2 und NULL
Listenaufbau 2: ph = (struct SX *)malloc(sizeof(struct SX)); ph 2. ph x = 2 ; ph p = NULL; px 5.
Listenaufbau 2: ph = (struct SX *)malloc(sizeof(struct SX)); ph 2. px zeigt auf Liste mit zwei Elementen, 5 und 2. ph x = 2 ; ph p = NULL; px 5. px p = ph; Lege Zeiger von erstem Listenelement auf das neue Element.
Listenaufbau 3: ph = (struct SX *)malloc(sizeof(struct SX)); ph: Zeiger auf drittes neues Listenelement ph px px zeigt auf Liste mit drei Elementen, 5, 2 und 7. ph x = 7 ; ph p = NULL; Belege neues Element mit Daten: 7 und NULL px p p = ph; Lege Zeiger von zweitem Listenelement auf das neue Element. 7.
Sortieren: Starte Liste mit 2, dann 5, dann 7. Verändere entsprechend die Zeiger: px zeigt auf Liste mit drei Elementen in der sortierten Reihenfolge px p = px p p; Lege Zeiger von 5 auf 7 ph px Lege Hilfszeiger auf 2 ph = px p; ph p = px; Lege Zeiger von 2 auf 5 px = ph; px zeigt auf 2
Entfernen: px zeigt auf Liste mit zwei Elementen, 5 und 7. ph = px p; Lege Hilfszeiger auf 2 px p = ph p; Lege Zeiger von 5 auf 7 ph px Entferne 2 aus der Liste: free(ph); Lösche alte Zelle
Sortiert Einfügen von 6: ppx Prüfe, ob 6 > 5. if (*p) x < 6 Wenn ja, verschiebe Zeiger p zum Zeiger des nächsten Listenelements. Start am Listenanfang: Zeiger p auf px auf erstes Listenelement struct SX **p; p = &px; p = &((*p) p);
Sortiert Einfügen von 6: ppx Prüfe, ob 6 > 5. if (*p) x < 6 Wenn ja, verschiebe Zeiger p zum Zeiger des nächsten Listenelements. p = &((*p) p);
Sortiert Einfügen von 6: ppx Prüfe, ob 7 > 6. if (*p) x < 6 Da nein, muss das neue Listenelement für 6 dazwischen eingeschoben werden. ph = *p; *p = (struct SX *)malloc(sizeof(struct SX)); ph
Sortiert Einfügen von 6: ppx Prüfe, ob 7 > 6. if (*p) x < 6 Da nein, muss das neue Listenelement für 6 dazwischen eingeschoben werden. ph = *p; *p = (struct SX *)malloc(sizeof(struct SX)); ph.
Sortiert Einfügen von 6: ppx Lege Zeiger in neuem Element auf den richtigen Nachfolger 7: (*p) x = 6; (*p) p = ph ; ph 6.