Einfache Verkettete Liste
-
Hmm also davon hab ich nicht soo viel verstanden

Ich wollte ja nur ein kleines Beispiel haben, am besten kommentiert, um mich selber durch den Quellcode schlagen zu können, denn das ist der Weg durch den ich irgendwie am meisten lerne....
Aber wenn das hier keiner macht / machen möchte (ist ja auch verständlich), muss ich eben darauf warten, bis wir das Thema Pointer im Unterricht angesprochen haben und irgendwann mal darauf zu sprechen kommen.
-
wow dieses tutorial beispiel ist auch total beschissen
ka, lies dir mal dieses durch vllt
http://richardbowles.tripod.com/cpp/linklist/linklist.htmdas hat viele grafiken und scheint die einzelnen schritte wie element einfügen und element löschen gut zu erklären
-
Der folgende Code ist ein minimales Lagerverwaltungsprogramm; das einfachste was sich bei mir ausgraben lies.
Mit Klassen und so habe ich nicht gearbeitet (konnte ich ja damals noch nicht
), aber der Code ist so kurz, dass man's vielleicht trotzdem verstehen kann...#include <iostream> #include <cstdlib> #include <string> void artikel_hinzufuegen(struct artikel neuer_artikel); void artikel_ausgeben(void); struct artikel{ std::string name; struct artikel *next; }; int main(void){ LOOP: system("CLS"); std::cout <<"+-------------------------------------+"<<std::endl <<"| < H > - Artikel hinzufuegen |"<<std::endl <<"| < A > - Artikel (sortiert) ausgeben |"<<std::endl <<"| < B > - Programm beenden |"<<std::endl <<"+-------------------------------------+"<<std::endl <<std::endl<<"Ihre Auswahl: < >\b\b\b"; char menue_auswahl; std::cin>>menue_auswahl; switch(menue_auswahl){ case 'H':{ system("CLS"); std::cout<<"Artikelname: "; std::string artikelname; std::cin>>artikelname; struct artikel a={artikelname}; artikel_hinzufuegen(a); std::cout<<"Der Artikel wurde erfolgreich hinzugefuegt!"<<std::endl; system("PAUSE"); break; } case 'A':{ system("CLS"); artikel_ausgeben(); system("PAUSE"); break; } case 'B':{ return 0; } default:{ std::cerr<<"FEHLER: Ungueltige Eingabe!"<<std::endl; system("PAUSE"); } } goto LOOP; } static struct artikel *erster_artikel=NULL; void artikel_hinzufuegen(struct artikel neuer_artikel){ static struct artikel *letzter_artikel=NULL; if(erster_artikel!=NULL){ struct artikel *speicher_fuer_neuen_artikel=new struct artikel; speicher_fuer_neuen_artikel->name=neuer_artikel.name; speicher_fuer_neuen_artikel->next=NULL; letzter_artikel->next=speicher_fuer_neuen_artikel; letzter_artikel=speicher_fuer_neuen_artikel; } else{ erster_artikel=new struct artikel; erster_artikel->name=neuer_artikel.name; erster_artikel->next=NULL; letzter_artikel=erster_artikel; } } void artikel_ausgeben(void){ if(erster_artikel!=NULL){ struct artikel *aktuell_ausgegebener_artikel=erster_artikel; unsigned int cnt=0; do{ std::cout<<++cnt<<"-ter Artikel in Liste: "<<aktuell_ausgegebener_artikel->name<<std::endl; aktuell_ausgegebener_artikel=aktuell_ausgegebener_artikel->next; }while(aktuell_ausgegebener_artikel!=NULL); } }
-
In diesem Forum gibt es auch eine Menge Threads, die sich mit dem Thema beschäftigen. Schau Dir mal dieses Posting über Listen an und folge auch den angegebenen Links.
Und natürlich Wikipedia hat auch was über Listen.Hier noch eine Überarbeitung Deines ersten Entwurfs.
#include <iostream> // #include <stdlib.h> braucht es nicht using namespace std; class Element { public: // get-setter kannst Du hier ausnahmsweise weglassen // wichtiger ist ein Konstruktor Element( int wert, Element* naechster ) : m_wert( wert ) , m_pNeachstesElement( naechster ) {} int m_wert; Element *m_pNeachstesElement; }; class Liste // die eigentliche Liste mit 'vielen' Element'en { public: Liste() : m_kopf(0) {} // ganz wichtig; Member im Konstruktor initialisieren void push_front( int wert ) // vorne einfügen { m_kopf = new Element( wert, m_kopf ); } void print( std::ostream& out ) // Ausgabe { for( Element* p = m_kopf; p; p = p->m_pNeachstesElement ) out << p->m_wert << " "; } private: Element* m_kopf; // Zeiger auf das erste Element }; int main() { Liste l; l.push_front( 4 ); l.push_front( 5 ); cout<<"Liste 1: "; l.print( cout ); cout << endl; cin.get(); return 0; }Da fehlt natürlich noch einiges - Destruktor, Copy-Konstruktor, Zuweisungsoperator und etliche Listen-Methoden.
Falls Du konkrete Fragen hast, so melde Dich nochmal.
Gruß
Werner
-
Vevusio schrieb:
ka, lies dir mal dieses durch vllt
http://richardbowles.tripod.com/cpp/linklist/linklist.htmdas hat viele grafiken und scheint die einzelnen schritte wie element einfügen und element löschen gut zu erklären
ja, aber die implementierung die rauskommt ist leider trotzdem bescheiden.
-
goto anywhere schrieb:
struct artikel{ std::string name; struct artikel *next; };Doch du hast eine Klasse benutzt. :p
Und dann noch goto für ne Schleife... Schäme dich.

-
drakon schrieb:
goto anywhere schrieb:
struct artikel{ std::string name; struct artikel *next; };Doch du hast eine Klasse benutzt. :p
Und dann noch goto für ne Schleife... Schäme dich.

Ich glaube, das einzige was ich unter Benutzerdaten angegeben habe ist, dass ich Elektroniker (in Ausbildung) bin. Ich habe also mit "selber Compiler spielen" und Assembler angefangen..., deshalb wohl bin ich dauernt versucht, so Sachen wie goto und vor allem Pointer in rauen Mengen zu verwenden.
-
Vevusio schrieb:
wow dieses tutorial beispiel ist auch total beschissen
ka, lies dir mal dieses durch vllt
http://richardbowles.tripod.com/cpp/linklist/linklist.htmdas hat viele grafiken und scheint die einzelnen schritte wie element einfügen und element löschen gut zu erklären
diese seite bekommt eine 7/10 auf der augenkrebs-skala von mir
-
goto anywhere; schrieb:
Mit Klassen und so habe ich nicht gearbeitet (konnte ich ja damals noch nicht
), ...Ich kann jedem Anfänger, der sich in C++ einarbeiten will, nur wärmsten empfehlen: zuerst in Klassen einarbeiten (insbesondere Konstruktor und Destruktor) und danach erst versuchen eine Liste zu programmieren.
Siehe dazu auch meine Verzweifelung am Anfang dieses Beitrags

Gruß
Werner
-
Dann danke ich euch allen schonmal!
Werde mich heute ein wenig tiefer darin einarbeiten und wenn ich fragen habe stell ich sie hier ^^mfg