HILFE: Lineare Listen!!!



  • Hallo ich studier Wirtschaftsinformatik im 1ten sem und hab Morgen meine Prog I Prüfung und komm einfach nicht dahinter wie man eine lineare Liste erstellt wie sie funktionier usw...
    kann mir anhand dieses Beispieles vllt erklären was das untere da treibt:S
    struct milchdaten{
    char art[40];
    int verdatum;
    int anzahl;
    };
    struct milchprod {
    milchdaten mprod;
    struct milchprod* next;};



  • Such doch mal nach "verketteten Listen", z.B. bei Google oder Wikipedia.



  • Nexus schrieb:

    Such doch mal nach "verketteten Listen", z.B. bei Google oder Wikipedia.

    hab ich schon alles versucht...
    bearbeite grad von ner anderen dozentin die lösungen doch bei gott diese listen wollen einfach nicht von mir verstanden werden...
    diese ganzen zeiger dann die man braucht zum anfügen ersetzten sortieren und dieses next vor allem!
    wär mal echt ne feine sache wenn das jemand etwas kommentieren würde...





  • struct milchprod {
    milchdaten mprod; <--- hier legt der doch eine neuen datentyp im structformat an wie zum beispiel ein int x aber wieso?
    struct milchprod* next;}; <---und was macht der da?

    sowas in der art hätt ich mir vllt erhofft.
    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.



  • flow21 schrieb:

    ...und hab Morgen meine Prog I Prüfung...

    Mal eine kurze Frage: Wenn man Probleme hat, kann man dann nicht erwarten, diese rechtzeitig zu lösen? Warum kommen alle immer mit: Abgabe Morgen, Prüfung Morgen...

    Zum Einen: Warum sollten wir uns deinen Druck anschließen?
    Zum Anderen: Wenn du dies bislang nicht verstanden hast, wie glaubst du es innerhalb eines Tages zu verstehen?



  • http://alles.wekodeko.de/projekt01/media/pdf/Aufgabe10.pdf
    falls es wen interessiert die aufgabe ist da zugänglich!



  • flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Wir können dir auch nicht viel mehr erklären, als wenn du dich selbst über die Thematik informieren würdest. Warum sträubst du dich überhaupt derart gegen das Lesen? Darum herum kommst du eh nicht, wenn du die Sache verstehen willst.

    flow21 schrieb:

    falls es wen interessiert die aufgabe ist da zugänglich!

    Erwartest du, dass wir die Aufgabe dort lösen und dir die Resultate schicken? Wenn ihr die Prüfung darüber habt, werdet ihr das Thema wohl behandelt haben...

    Wie asc schon sagte, bringt weder ein "HILFE!!" im Titel noch die Aussage, dass es dringend ist, etwas. Im Gegenteil - bei solchen Titeln zum Beispiel gibt es einige Leute, die sich den Thread gar nicht erst ansehen. Und falls man sich ihn doch durchliest, hat man schon einmal einen schlechten ersten Eindruck.

    Also reiss dich zusammen und lies wenigstens den Wikipedia-Artikel. Wenn du dann konkretere Fragen hast, kannst du ja wieder fragen. Aber die Grundsätze solltest du schon verstanden haben.



  • asc schrieb:

    flow21 schrieb:

    ...und hab Morgen meine Prog I Prüfung...

    Mal eine kurze Frage: Wenn man Probleme hat, kann man dann nicht erwarten, diese rechtzeitig zu lösen? Warum kommen alle immer mit: Abgabe Morgen, Prüfung Morgen...

    Zum Einen: Warum sollten wir uns deinen Druck anschließen?
    Zum Anderen: Wenn du dies bislang nicht verstanden hast, wie glaubst du es innerhalb eines Tages zu verstehen?

    das mit den prüfungen war nur eine kleine situationsbeschreibung über mich selbst und meiner situation eine kurze kleine vorstellung mehr nicht...
    und ich zwinge niemanden oder dränge niemanden ich würd mir lediglich jemand wünschen der sich vllt ne halbe stunde etwas von seiner kostbaren zeit entbehren kann.

    ich bin ja nicht dumm nür bräucht ichs einfach mal anhand einer beispieles erklärt



  • Nexus schrieb:

    flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Wir können dir auch nicht viel mehr erklären, als wenn du dich selbst über die Thematik informieren würdest. Warum sträubst du dich überhaupt derart gegen das Lesen? Darum herum kommst du eh nicht, wenn du die Sache verstehen willst.

    das habe ich ja getan aber der wiki auszug fand ich brachte nichts der andere hatte schon eher was gebracht

    flow21 schrieb:

    falls es wen interessiert die aufgabe ist da zugänglich!

    Nexus schrieb:

    Erwartest du, dass wir die Aufgabe dort lösen und dir die Resultate schicken? Wenn ihr die Prüfung darüber habt, werdet ihr das Thema wohl behandelt haben...

    die lösung habe die stellt die prof immer gleich mit rein nur versteh ich diese nicht und hätte es vllt etwas erklärt was da gemacht wird!

    Nexus schrieb:

    Wie asc schon sagte, bringt weder ein "HILFE!!" im Titel noch die Aussage, dass es dringend ist, etwas. Im Gegenteil - bei solchen Titeln zum Beispiel gibt es einige Leute, die sich den Thread gar nicht erst ansehen. Und falls man sich ihn doch durchliest, hat man schon einmal einen schlechten ersten Eindruck.

    Also reiss dich zusammen und lies wenigstens den Wikipedia-Artikel. Wenn du dann konkretere Fragen hast, kannst du ja wieder fragen. Aber die Grundsätze solltest du schon verstanden haben.



  • für alle die meinten ich bräuchte die lösunge hier ist sie
    da wo die fragezeichen stehen komm ich net dahinter was des soll
    #include <iostream>
    using namespace std;
    struct milchdaten{
    char art[40];
    int verdatum;
    int anzahl;
    };
    struct milchprod {
    milchdaten mprod; <-------?
    struct milchprod* next;}; <-------?

    void ersetze_ersten(milchprod*& anker,milchdaten datneu) <-------?
    {
    // neues Milchprodukt Listenelement anlegen
    milchprod* neu = new milchprod;
    neu->mprod = datneu;
    // erstes Element der Liste ausketten
    // neues Element dafür einketten
    // oder nur Daten ersetzen

    if (anker == NULL){// Liste leer
    anker = neu;
    neu->next = NULL;
    }
    else{
    milchprod* hilf;
    hilf= anker;
    neu->next = hilf->next;
    anker = neu;
    delete hilf;
    }
    return;
    }
    void einfuegen(milchprod*& anker)
    {
    milchprod* neu = new milchprod;
    cout<<"Art:";
    cin>>neu->mprod.art;
    cout<<"Verfallsdatum: ";
    cin>>neu->mprod.verdatum;
    cout<<"Anzahl Verkaufseinheiten:";
    cin>>neu->mprod.anzahl;
    neu->next= NULL;
    // Liste leer
    if (anker == NULL)
    anker = neu;
    else{
    milchprod* lfd = anker;
    while(lfd->next !=NULL)// Ende suchen
    lfd = lfd->next;
    lfd->next = neu; // einhängen
    }
    }
    void ausgeben(milchprod* anker)
    {
    milchprod* lfd = anker;
    while(lfd!=NULL){
    cout<<lfd->mprod.art<<":"<<lfd->mprod.verdatum<<":"
    <<lfd->mprod.anzahl<<endl;
    lfd=lfd->next;
    }
    }
    int main()
    {
    milchprod* anker=NULL;
    einfuegen(anker);
    einfuegen(anker);
    ausgeben(anker);
    // Ersetzen
    milchdaten neu;
    cout<<"Neues Produkt:";
    cout<<"Art: ";
    cin>>neu.art;
    cout<<"Verfallsdatum:";
    cin>>neu.verdatum;
    cout<<"Anzahl Verkaufseinheiten:";
    cin>>neu.anzahl;
    ersetze_ersten(anker,neu);
    ausgeben(anker);
    return 0;
    }



  • flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Dann sitzt du im Studium vollkommen falsch, und solltest dringend in eine Ausbildung wechseln. Ein Studium enthält zwangsläufig Theorie, und man erwartet sogar von dir, das du dir Wissen selbst aneignen kannst.

    flow21 schrieb:

    struct milchprod {
    milchdaten mprod; <--- hier legt der doch eine neuen datentyp im structformat an wie zum beispiel ein int x aber wieso?
    struct milchprod* next;}; <---und was macht der da?

    1. Du willst doch Daten speichern, also müssen diese irgendwo stehen.
    Du willst Daten vom Typ "milchdaten" speichern. Diese müssen also in jedem Element wiederholt werden. Deine Liste besteht aus Elementen des Typs "milchprod", demzufolge muss hier die "milchdaten" stehen. Jede Instanz von milchprod stellt nun ein Element deiner Liste dar.

    2. Damit du mehrere in Folge speichern kannst, musst du diese auch verknüpfen.
    Irgendwie musst du ja deine Daten miteinander verbinden. Das erste Element zeigt bei einer einfach verketteten Liste immer auf das zweite, das zweite auf das dritte...

    Eine Schreibweise ist aber unter C++ unüblich (nachfolgend auskommentiert):

    struct milchprod {
      milchdaten mprod;
      /* struct */ milchprod* next;
    };
    

    Nun gehen wir mal schrittweise ein stumpfes Beispiel durch:

    Du beginnst mit einer Leeren liste:

    milchprod * first = NULL; // Es existiert kein Element.
    

    nun legen wir ein Element an:

    first = new milchprod;
    first->mprod = /*...*/; // Das erste Element setzen
    first->next = NULL; // Noch existiert kein nachfolger
    

    Wenn wir ein weitere Element einfügen, hängen wir es an das Letzte element der bestehenden Liste hinten an:

    first->next = new milchprod;
    first->next->mprod = /*...*/; // Das zweite Element setzen
    first->next->next = NULL; // Noch existiert kein Nachfolger vom zweiten
    

    Natürlich will man das ganze dynamischer gestalten, und versucht das ganze daher zu verallgemeinen (Mittels schleifen bis zum letzen Element hangeln, dort dann next mit dem nächsten Element füllen...).



  • asc schrieb:

    flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Deswegen bin ich an die FH gegangen das ist genau mein Ding, nur habe ich leider einen Prof erwischt der es vorzog sich sehr ausgiebig mit kleineren Dingen wie if,while usw vorzog und die Listen gegen Ende einfach mal einschob und wir sollten es mal selbst rausfinden...
    Deine Ausführungen haben mir sehr geholfen. Vielen Dank!



  • flow21 schrieb:

    für alle die meinten ich bräuchte die lösunge hier ist sie

    Okay, der Code entspricht auch wirklich nicht der üblichen Verwendung einer einfach verketteten Liste. Er wiederspricht allen Regeln von sinnvoller Codetrennung und Wiederverwendbarkeit. IMHO ist dadurch das ganze auch schwerer zu verstehen.

    Wenn der Code von deinem Dozenten stammt, so möchte ich gerne mal wissen, ob dieser jemals in seinen Leben Code innerhalb eines echten Projektes geschrieben hat.

    cu André
    P.S: Ich habe leider keine Zeit derzeit irgendwas zu erklären, vielleicht später am Abend (Vor 20-21 Uhr ist damit aber nicht zu rechnen).



  • flow21 schrieb:

    asc schrieb:

    flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Deswegen bin ich an die FH gegangen das ist genau mein Ding,...

    Die FH mag praxisorientierter als eine Uni sein, dennoch ist auch hier die Theorie entscheidend. Selbst in einer Ausbildung ist Theorie noch teilweise wichtig, nur das letztere wohl das Praxisnächste vor der eigentlichen Praxis ist...



  • asc schrieb:

    flow21 schrieb:

    asc schrieb:

    flow21 schrieb:

    ich kann eher anhand von praxis lernen anstatt theortischen kram zu lesen.

    Deswegen bin ich an die FH gegangen das ist genau mein Ding,...

    Die FH mag praxisorientierter als eine Uni sein, dennoch ist auch hier die Theorie entscheidend. Selbst in einer Ausbildung ist Theorie noch teilweise wichtig, nur das letztere wohl das Praxisnächste vor der eigentlichen Praxis ist...

    Also bisher muss ich sagen wird einem alles super erklärt.
    Es mag sein, das manche Vorlesungen echt verwirrend sind doch anhand der Übungen wird es einen sehr gut erläutert. Bis auf diese Listen läufts bisher gut.
    Nur hatte ich Probleme wie man eine Liste anlegt, das ganze verbindet und den Anker setzt(Zeiger auf Ende oder Anfang)



  • flow21 schrieb:

    ...

    Hast du dir dennoch meine kurze Ausführung oben angeschaut (Unterhalb von deinem Codeauszug, den du übrigens in die cpp-Tags schreiben solltest)? Bezieht sich aber nicht auf den Code, da ich vorher angefangen habe zu tippen.



  • asc schrieb:

    flow21 schrieb:

    ...

    Hast du dir dennoch meine kurze Ausführung oben angeschaut (Unterhalb von deinem Codeauszug, den du übrigens in die cpp-Tags schreiben solltest)? Bezieht sich aber nicht auf den Code, da ich vorher angefangen habe zu tippen.

    Da steht ja auch "hatte". Denn hab ich mir angeschaut und mit diesen kleinen Schnipselchen versuch ich mich da etz noch durchzuringen. Aller Anfang ist schwer! 😉



  • Vielleicht hilft der dieser Thread auch weiter.

    Es geht darin zwar um Klassen sowie nicht einer einfach verketteten Liste sondern einen Stack, aber darin habe ich auf der 2ten Seite noch sehr ausführlich etwas geschrieben (Ich bin mir auch sicher ich noch irgendwo anders eine ellenlange Erklärung für eine einfach verkettete im Forum hatte, ich finde sie nur nicht auf anhieb).

    cu André



  • asc schrieb:

    Vielleicht hilft der dieser Thread auch weiter.

    Es geht darin zwar um Klassen sowie nicht einer einfach verketteten Liste sondern einen Stack, aber darin habe ich auf der 2ten Seite noch sehr ausführlich etwas geschrieben (Ich bin mir auch sicher ich noch irgendwo anders eine ellenlange Erklärung für eine einfach verkettete im Forum hatte, ich finde sie nur nicht auf anhieb).

    cu André

    Ne Klassen(haben wir mal angesprochen, kommt wenn dann erst zu ProgII) und Stack noch gar nicht...
    Ich denk ich nutze meine Hilfsmittelliste um mir 2 Klausuraufgaben da aufzuschreiben und mir dann alles zusammenzureimen:D
    dennoch vielen dank für die Mühe!


Log in to reply