Suche Um ein Element in der Liste zu suchen, hangelt man sich von einem Listenelement zum nächsten, entweder bis man die gesuchte Element gefunden hat, oder bis man NULL erreicht: node search_for(node list, int data) { while (list! = NULL) { if (list->data == data) return list; list = list->next;} return NULL;} Wenn man erst mal den node pointer hat, kann man z. B. rechts davon einfügen oder löschen. Vektoren und Listen. Zusammenfassung Eine einfach verkettete Liste speichert pro Element einen Zeiger auf das nächste Element und die Nutzdaten. Das Durchlaufen von Rechts nach Links, das Einfügen und das Entfernen des Elements rechts des aktuellen Elements sind einfach und erfordern nur das umsetzen von zwei Zeigern. Gegenüber doppelt verketteten Listen brauchen sie also weniger Verwaltungsaufwand, bei etwas geringerer Flexibilität. Weiteres Lesematerial doppelt verkettete Listen Heaps und Heapsort Überlegte Verwendung von Datentypen und Datenstrukturen Bücher "Algorithmen in C" von Robert Sedgewik ist allgemeinverständlich und praktisch.
= 0 && p - > next - > data > x) p = p - > next; q - > next = p - > next; p - > next = q; // Wert x löschen while ( p - > next! = 0 && p - > next - > data! C++ listen erstellen. = x) Node * q = p - > next; //Zeiger ein Element nach p setzen p - > next = q - > next; //Knoten aushängen delete q; //ausgehängten Knoten löschen // Alle x ausgeben while ( p - > next! = 0) p = p - > next; //auf nächstes Element verweisen if ( p - > data == x) //Wert suchen cout << p - > data << endl;} // Konstruktor // Hilfskopfknoten erstellen head - > next = q; //Node an Listenanfang einfügen knotenanzahl = 0; //Anzahl der Knoten definieren q - > data = 0; //Datenschritt entfernen // Destruktor // Alle Elemente löschen while ( head! = 0) head = head - > nextPtr; delete p;}
Dazu muss man den next -Zeiger der Liste auf das neue Element setzen, und den next -Zeiger des neuen Element auf den alten Wert des next -Zeigers der Liste: node insert_right(node list, int data){ node new_node = (node) malloc( sizeof ( struct list_node)); new_node->data = data; new_node->next = list->next; list->next = new_node; return new_node;} In diese List soll links neben node1 ein Element mit dem Datum 3 eingefügt werden. Durch das Setzen eines Zeigers wird das neue Element in die Liste eingegliedert. Die gleiche Liste in etwas schönerer Darstellung Elemente löschen Auch das Löschen eines Elements ist einfach, wenn man einen Zeiger auf das Element links des zu löschenden Elements hat. Liste erstellen c++. Dazu muss man nur den next -Zeiger des linken Elements auf das Element rechts des zu löschenden setzen: node delete_right(node list){ node tmp = list->next; list->next = list->next->next; free(tmp); return list;} In diesem Fall wurde noch ein temporärer Zeiger benutzt, um den Speicher des genutzten Elements freizugeben.
Natürlich sind solche Listen
nicht unbedingt sinnvoll. Was passiert also, wenn der
komplette Listeninhalt ausgegeben wird. foreach ( Object obj in
alist)
{
Console. WriteLine(obj);}
Diese Ausgabe funktioniert ebenfalls fehlerlos, ist nur
beim Element des Thread wenig nützlich. Problematisch
wird so eine Liste erst dann, wenn man die Summe aller
Listenelemente berechnen will, oder alle Elemente auf
einen anderen Datentyp konvertieren möchte. Solange
sich nur Zahlen in der Liste befinden, ist es kein
Problem. Stößt man hingegen auf Zeichenketten oder
andere Datentypen sind die Probleme buchstäblich
vorprogrammiert. Eine ArrayList kann viele verschieden Datentypen
aufnehmen, doch muss der Programmierer selbst dafür
Sorge tragen, dassder Liste nur Elemente zugefügt
werden, die auch fehlerlos verarbeitet werden können. Liste erstellen. Eine Liste die von vornherein auf einen bestimmten
Datentype festgelegt ist, ist in den meisten Fällen
sinnvoller. Dafür gibt es generische Listen. Die Definition einer generischen Liste ist denkbar
einfach:
List
Möchte man die Werte eines Feldes initialisieren, schreibt man die Werte einfach in geschweifte Klammern. int i, punkte[5] = { 1, 3, 5, 7, 9}; // Werte ausgeben for(i=0; i<5; i++) { printf("Wert Index%d:%d\n", i, punkte[i]);} Wert Index 0: 1 Wert Index 1: 3 Wert Index 2: 5 Wert Index 3: 7 Wert Index 4: 9 Null-Initialisierung Ist die Anzahl der Werte bei der Initialisierung kleiner als die Feldgröße, werden die restlichen Werte auf Null gesetzt. Liste erstellen - C und C++ - Fachinformatiker.de. int punkte[5] = { 1, 3, 5}; Wert Index 3: 0 Wert Index 4: 0 Dadurch lässt sich ein Feld auch einfach komplett mit Null-Werten initialisieren: Wert Index 0: 0 Wert Index 1: 0 Wert Index 2: 0 Feldgröße durch Initialisierung bestimmen Lässt man bei der Initialisierung die Angabe für die Feldgröße weg, wird automatisch die Größe durch die Anzahl der Initialisierungswerte bestimmt. Dieses Array wird die Größe 3 haben: int punkte[] = { 1, 2, 3}; Wert Index 1: 2 Wert Index 2: 3
Array Listen und Generische Listen Listen sind zweifellos ein tolle Sache. Listen sind wunderbar um Daten zu speichern, zu zählen, zu sortieren oder anderweitig zu verwenden. Leider sind Listen nicht so einfach wie es auf den ersten Blick scheint. Das Instanzieren einer einfachen ArrayList ist recht einfach und unterscheidet sich nicht vom Instanzieren anderer Objekten. ArrayList alist = new ArrayList(); Will man nun dieser Liste Elemente hinzufügen, gibt es dafür die 'Add' Methode. ("Hallo"); ("Welt"); Zwei neue Zeichenketten werden der Liste hinzugefügt. Das war leicht. Kann man aber der Liste auch andere Typen als Zeichenketten hinzufügen? Natürlich, auch das ist kein Problem. Fügen wir also eine Ganzzahl und eine Fließkommazahl hinzu. (1); (23. Einfügen eines Knotens in einfach verkettete Liste C++ | Delft Stack. 5f); Jetzt ist der richtige Moment für Verwunderung. Zeichenketten und Zahlen in derselben Liste? Ja, das geht wirklich. Und man kann noch ganz andere Dinge hinzufügen. Versuchen wir es also mal mit etwas ungewöhnlichem, wie einem Thread. Thread tr = new Thread(methode); (tr); Auch das funktioniert.