actionbrowser.com
Eine weitere Schwierigkeit ist, dass wir mit einer einfach verketteter Liste arbeiten, d. h. wir können uns in der Liste nur in eine Richtung bewegen, nämlich nach vorne. Wir löschen immer das letzte Element in der Liste, dass uns bereits bekannt ist. Zuerst müssen wir aber das vorletzte Element finden, damit wir den Zeiger für den nächsten Durchgang auf null setzen können. Dieser Vorgang wird so lange wiederholt bis die Liste nur aus einen Element besteht – den Listenkopf. Dieser wird anschließend separat gelöscht. return; // solange der Zeiger nicht Null ist, also noch Elemente vorhanden sind... while(kopf->nachfolger! Einfach verkette Listen in C - Was mache ich falsch?. = NULL) //.. das vorletzte ELement Listenelement *vorletztesElement = kopf; while(vorletztesElement->nachfolger! = ende) vorletztesElement = vorletztesElement->nachfolger;} // lösche das letzte Element delete ende; // das vorletzte Element wird zum Letzten vorletztesElement->nachfolger = NULL; ende = vorletztesElement;} // zuletzt noch den Listenkopf löschen delete kopf;} Somit hätten wir eine einfache Implementierung einer einfach verketteten Liste.
Wie man sieht, ist die Verwendung eines statischen Arrays in diesem Fall nicht optimal. Man benötigt eine dynamische Datenstruktur, die nur sowieso Objekte verwaltet, die auch wirklich nötig sind. Wohl die einfachste dynamische Datenstruktur ist eine einfach verkettete Liste. Einfach verkettete Liste Eine Liste ist eine Kette aus beliebig vielen Listenelementen (Knoten), die untereinander über Zeiger verbunden sind. Die Anzahl von Elementen kann zu Laufzeit des Programms beliebig variieren. Jedes Listenelement besteht aus dem Datenbereich und einen Zeiger, der auf das nächste Listenelement zeigt. Mit dem Datenbereich ist eine oder mehrere Variablen gemeint, die die eigentlichen Daten(Werte, Strings u. s. w. ) speichern. Schematische Darstellung eines Listenelements: Ein einzelnes Element hat keine Informationen über seine Position in der Liste. Einfach verkettete listen c.s. Alles was es weiß, ist die Adresse seines Nachfolgers. Eine Abbildung soll das ganze Prinzip noch mal verdeutlichen. Schematische Darstellung einer einfach verketteter Liste mit vier Elementen: Das erste Element in der Liste wird als Listenkopf (head oder root) bezeichnet und das letzte als Listenende (tail).
= NULL) { vorheriges_buch -> naechstes = neues_buch;} //Erstes Buch initialisieren if( erstes_buch == NULL) { erstes_buch = neues_buch;} //Datensatz einlesen eingabe ( neues_buch); vorheriges_buch = neues_buch; break;} //Suche aufrufen case 2: suche ( erstes_buch); break; //Alle Buecher ausgeben case 3: ausgabeAlle ( erstes_buch); break; //Ein Buch loeschen case 4: erstes_buch = loeschen ( erstes_buch);}} while ( wahl!
Dies kann man erreichen, indem man vom Head-Element aus die Zeigerwerte der einzelnen Elemente mit dem Zeigerwert des angegebenen Elements vergleicht: element_type * find_previous_element ( element_type * e) // Temporären und Vorgänger-Zeiger deklarieren: element_type * e_pos; element_type * e_prev; // Temporären Zeiger auf Head-Element setzen: e_pos = e0; // Temporären Zeiger mit Zeigern der Listenelemente vergleichen: while ( ( e_pos! = NULL) && ( e_pos! Einfach verkettete listen c.h. = e)) e_prev = e_pos; // Zeiger auf bisheriges Element zwischenspeichern e_pos = e_pos -> next; // Temporären Zeiger iterieren} // Die while-Schleife wird beendet, wenn die Liste komplett durchlaufen // oder das angegebene Element gefunden wurde; in letzterem Fall zeigt // e_pos auf das angegebene Element, e_prev auf dessen Vorgänger. // Fall 1: Liste wurde erfolglos durchlaufen (Element e nicht in Liste): if ( ( e_pos == NULL) && ( e_prev! = e)) // Fall 2: Element e ist erstes Element der Liste: else if ( e_pos == e0) // Fall 3: Element e0 wurde an anderer Stelle gefunden: else return e_prev;} Das Löschen eines Elements kann mit Hilfe der obigen Funktion beispielsweise folgendermaßen implementiert werden: int delete_element ( element_type * e) // Vorgänger-Zeiger deklarieren: // Position des Vorgänger-Elements bestimmen: e_prev = find_previous_element ( e) // Fehlerkontrolle: Element e nicht in Liste: if ( ( e_prev == NULL) && e!
node* createRoot(int data) if (root == NULL) return NULL; root->data = data; return root;} * Hängt am Ende an. Falls nicht der letzte Knoten übergeben wurde, wird das Ende gesucht. * Auf diese Weise kann man einen beliebigen Knoten übergeben. Es wird nicht geprüft, * ob die Daten bereits in der Liste sind. Wenn der erste Parameter NULL ist oder kein * Speicher angefordert werden kann gibt die Funktion NULL zurück. Im Erfolgsfall wird * der neue Knoten zurückgegeben. node* appendNode(node* oldtail, int data) if (oldtail == NULL) return NULL; node *newtail = malloc(sizeof(node)); if (newtail==NULL) return NULL; while (oldtail->next! Einfach verkettete listen c.e. = NULL) // ans Ende oldtail = oldtail->next; // nun ist oldtail->next NULL oldtail->next = newtail; newtail->prev = oldtail; newtail->next = NULL; newtail->data = data; return newtail;} * Gibt die Liste ab der Stelle root aus void printList(node* root) for (; root! = NULL; root = root->next) * Geht ans Ende und gibt die Liste rückwärts aus void printListReverse(node* curr) if (curr==NULL) return; for (; curr->next!
Deutschlandkarte Stadtplan Koblenz Wendelinushof, Weitersburg Kontakt speichern Teilen
Große kulinarische Vielfalt durch reichhaltiges Frühstücksbuffet sowie wechselnde, raffiniert zubereitete, günstige schmackhafte Tagesgerichte, deftige Hausmannskost wie z. B. "Gefüllte mit Specksoße" und Schlachtkarte. Basis der Speisen bilden Produkte vom Wendelinushof, lokalen und regionalen Erzeugern. Impressum - Wendelinus Hof. Öffnungszeiten: siehe unter Genuss Region Saarland Um mit der Qualität ihrer Küche und den regionalen Produkten möglichst viele Menschen zu begeistern, haben sich Produzenten, Veredler und Gastronomen in der Initiative "Genuss Region Saarland" zusammengeschlossen. Sie alle sorgen dafür, dass im Saarland Regionales, Traditionelles und auch Innovatives immer frisch und als Genuss-Erlebnis auf den Tisch kommt. Sei es bei einem Besuch im Restaurant, beim Einkauf in einem Hofladen oder bei einem kulinarischen Seminar – bei Festen, Führungen und Feinschmeckerabenden kommen Gäste voll auf ihre Kosten. Öffnungszeiten Heute geöffnet Sonntag 09:00–20:00 Uhr Dienstag 09:00–20:00 Uhr Mittwoch 09:00–20:00 Uhr Donnerstag 09:00–20:00 Uhr Freitag 09:00–20:00 Uhr Samstag 09:00–20:00 Uhr Autor Restaurant Hofladen Wendelinushof Aktualisierung: 11.