wie soll ich removeElement implementieren?



  • Hi Alle
    ich würde ein Methode RemoveElement unter C (kein C++)implementieren,
    damit unter
    bestimmter Anforderung kann ich ein Item (nur eins )von
    meinem dynamischen Array loeschen,
    nur mit free()könnnte es reichen ?
    z.b,aehnliche wie dies
    free(&Meinearray[zuloeschendePosition]);

    wenn ja,nach dem free()
    sollte ich die Groesse von Array noch reduzieren,oder wird
    das Array sich automatisch reduziert?
    Vielen Dank



  • Wenn du tatsächlich mit einem Array arbeitest, wird es häßlich:

    int i;
    int *arr = malloc(10 * sizeof(int));
    int *tmp;
    
    /* Mit arr arbeiten 
       ....
     */
    
    /* 3. El. Löschen: */
    
    int *tmp = malloc( 9 *sizeof(int));
    
    for(i = 0; i != 9; ++i)
    {
       if(i < 2)
          tmp[i] = arr[i];
       else if(i > 2)
          tmp[i] = arr[i+1];
    }
    
    free(arr);
    arr = tmp;
    

    Wenn du dies häufiger machen musst, denk mal über ne verkettete Liste nach.



  • Hast du dir schon mal Gedanken gemacht, dass deine Postings vielleicht Leute lesen müssen?
    Mein Tipp: Lern estmal Deutsch!



  • @linglin
    Bei einem Array musst du die Elemente, die nach dem zu löschenden Element kommen, um eine Stelle nach vorne kopieren. Das geht allerdings recht einfach mit memmove() bzw. memcpy(). Da du am Ende dann ein überflüssiges Element hast, solltest du den reservierten Speicher für dein dynamisches Array kürzen. Dazu solltst du aber nicht free() verwenden sondern realloc().


Anmelden zum Antworten