Listenaufgaben (maybe update later ^^)



  • Mein Einfuegen Ende bricht ab.

    ist das so richtig, dass NEU->next = DUMMY; dahin zeigt, wo DUMMY hinzeigt?
    oder müsste das NEU->next = NULL; heißen?
    und dann DUMMY->next = NEU?
    hab schon alles ausprobiert...

    typedef struct item
    {
        int nr;
        int data;
        char daten[200000];
        struct item *next;
    };
    
    item* START = NULL;             // Zeiger auf den Anfang der Liste
    int cnt = 0;
    

    ...

    void do_einfuegen_ende(){
    
    item *DUMMY;
    item *NEU;
    int i;
    NEU = (item*)malloc(sizeof(item));
    printf("Geben Sie Ihre Daten ein:\n");
    scanf("%d",&i);
    NEU->data = i;
    int cnt=0;
    
    DUMMY = START;
    
    while(DUMMY){
    DUMMY=DUMMY->next;
    cnt++;
    }
    cnt++;
    NEU->nr = cnt;
    NEU->next = DUMMY;
    DUMMY = NEU;
    
    }
    


  • während "an Position einfuegen", taddelos funktioniert.
    Wollte jetzt aber noch die nr erhöhen von jedem Folge element.
    Jetzt sagt er in de While Schleife auf einmal: 'nr' undecleared...

    void do_einfuegen_pos(){
    int i,j;
    printf("Geben Sie Die Stelle an, an der die Liste eingefügt werden soll:\n");
    scanf("%d",&i);
    printf("Geben Sie Die Daten ein:\n");
    scanf("%d",&j);
    item *NEU;
    item *DUMMY;
    NEU = (item*)malloc(sizeof(item));
    NEU->nr=i;
    NEU->data=j;
    DUMMY=START;
                while(DUMMY && NEU->nr!=DUMMY->nr){
                DUMMY=DUMMY->next;
                }
                NEU->next=DUMMY->next;
                DUMMY->next =NEU;
    while(NEU){
    NEU=NEU->next;
    NEU->nr=nr+1;
    
    }
    }
    


  • ok do_einfuegen_ende funktioniert jetzt

    void do_einfuegen_ende(){
    
    item *DUMMY;
    item *NEU;
    int i;
    NEU = (item*)malloc(sizeof(item));
    printf("Geben Sie Ihre Daten ein:\n");
    scanf("%d",&i);
    NEU->data = i;
    int cnt=0;
    
    DUMMY = START;
    
    while(DUMMY->next){
    DUMMY=DUMMY->next;
    cnt++;
    }
    if(DUMMY->next==NULL){
    cnt++;
    NEU->nr=cnt;
    NEU->next = NULL;
    DUMMY->next = NEU;
    
    }
    
    }
    


  • soll letztes Listenelement loeschen, was geht jetzt wieder nicht?

    void do_loeschen_ende(){
    item *DUMMY;
    item *X;
    DUMMY = START;
    if(!START){
    printf("keine Elemente in der Liste vorhanden!\n");
    system("Pause");
    return;
    }
    while(DUMMY->next){
          if(DUMMY->next->next==NULL){
             X=DUMMY->next;
             DUMMY->next=X->next;
             free(X);
           }
    DUMMY=DUMMY->next;
    }
    
    }
    


  • So geht das nicht, wenn die Liste aus nur einem Element besteht. Das neue Ende muss auch noch irgendwie gekennzeichnet werden ( Head = NULL oder LastElement->next = NULL ).


Anmelden zum Antworten