Mittelwert einfach verkettete Liste



  • Hallo,
    Ich habe ein Problem beim berechnen des Mittelwertes einer einfach verketteten Liste.

    Eingegeben wird eine liste, deren Inhalt und Größe der Benutzer bestimmt.
    Ich bekomme die Adressen der p werte ausgegeben, wenn ich allerdings ein * vor das p wird mir folgender Fehler ausgegeben:

    "invalid operands to binary + (have 'int' and 'listelement')"

    Kann mir jemand bitte weiter helfen?

    Grüße

    Hier mein Codeteil:

    float meanValue(ListElement * p)
    {
        int sum = 0, count = 0;
        float mittelwert;
    
        while (p != NULL) {
            sum += p;
            count++;
            p = p->next;
            count++;
        }
    
    mittelwert = sum/count;
    
    return mittelwert;
    
    }
    


  • Wie ist denn ListElement definiert?

    Das ist doch sicher eine struct mit Zeiger und Nutzinhalt.

    Könnte es da nicht vielleicht evtl. sinnvoller sein, den Mittelwert vom Nutzinhalt zu berechnen.

    Mir fällt jetzt gerade nicht ein, wofür man den Mittelwert der Speicheradressen der Liste gebrauchen könnte. (Das berechnest du gerade)



  • Das struct sieht so aus:

    typedef struct listelement {
    
        int key;
        struct listelement * next;
    
    } ListElement;
    

    Dass ich den Mittelwert der Adressen berechne, ist mir ja klar.
    Aber ich weiß leider nicht, wie ich die Werte hinter diesen Adressen auf mein sum bekomme...



  • Du weißt nicht, wie du über p auf key zugreifst?

    So wie auf next auch.
    Das ist nicht anders, nur weil next ein Zeiger ist.

    Weißt du denn, wie du bei einer struct -Variable auf die Member zugreifen kannst?
    Irgendwie müssen die Werte ja auch nach key gekommen sein.



  • Also muss ich schreiben

    float meanValue(ListElement * p)
    {
        int sum = 0, count = 0;
        float mittelwert;
    
        while (p != NULL) {
            sum += p->key;
            count++;
            p = p->next;
            count++;
        }
    
    mittelwert = sum/count;
    
    return mittelwert;
    

    Irgendwas stimmt jetzt mit meinem Count nicht.
    Sum liefert die richtigen Werte, jedoch steht count imemr falsch...



  • Okay... ich Depp hab 2 mal count++; geschrieben. 😵



  • Du solltest noch den Fall einer leeren Liste abfangen und nimm lieber double statt float.


Anmelden zum Antworten