verkettete liste



  • also
    ich komm nit mehr weiter mit der Aufgabe,

    also ich muss ein Bubblesort als verkettete Liste programmieren.

    habe versucht mit einem array im struct ,so dass array[i] mit array[i+1] verglichen wird,

    das klappt nicht ;

    wie kann man es denn machen?

    DANKE!!!



  • anstatt

    array[i] mit array[i+1]

    musst du

    *obj mit *(obj->next)

    vergleichen 😉



  • wie soll ich jetzt die zahlen in einem Array unterbringen oder einzeln in struct defiznieren, und dann zeigen lassen....??

    Kann mir jemand einen genauen Tipp geben,bitte?

    Danke



  • Wieso willst du ein Array haben?

    Eine Liste ist nunmal eine Liste und kein Array. Schau dir an wie BubbleSort funktioniert.

    BubbleSort ist ein "dummer" Sortier Algo. Er nimmt das erste Element und vergleicht es mit dem Element rechts daneben. Wenn noetig tauscht er die beiden Elemente und vergleicht das Groessere wieder mit dem Element rechts daneben.

    Bei Arrays ist das aktuelle Element: arr[i] bei Listen list->value
    Bei Arrays ist das Element rechts davon: arr[i+1] bei Listen list->next->value



  • Also habe nicht richtig verstanden was zu machen ist, denn
    habe so angefangen aber weiß nicht mehr weiter .....

    was soll ich machen ..?
    Bitte hilft mir ...

    #include <stdio.h>
    #include <stdlib.h>

    struct elem {
    int zahlen ;
    struct elem *next;

    };

    int main()
    {
    struct elem * anfang=NULL,*zeiger;

    int zahlen;
    printf("zahlenE \n \t");
    while(1)
    {
    scanf("%d",&zahlen);

    if(zahlen==0) break;

    if (zeiger==0) printf("NO MEM");

    zeiger->zahlen=zahlen;
    zeiger=anfang->next;
    anfang=zeiger;

    }

    printf("Zahlen : \n");
    while (zeiger!=0){
    printf("%d",zeiger->zahlen);
    zeiger=zeiger->next;
    }
    return 0;
    }



  • Klappt aber nur so halbwegs... Ist schon spät...

    #include <stdio.h>
    #include <stdlib.h>
    
    struct elem {
    	int val;
    	struct elem *next;
    };
    
    struct elem *insert(struct elem *list, int val) {
    	struct elem *p = malloc(sizeof(struct elem));
    	p->val = val;
    	p->next = list->next;
    	list->next = p;
    	return p;
    }
    
    int main() {
    	struct elem *root = malloc(sizeof(struct elem));
    	struct elem *p;
    	root->next = NULL;
    	insert(root, 1112);
    	insert(root, 7);
    	insert(root, 3);
    	insert(root, 3);
    	insert(root, 1112);
    	insert(root, 7);
    	insert(root, 123);
    	insert(root, 3);
    	insert(root, 23);
    	insert(root, 55);
    	insert(root, 325);
    	insert(root, 4133);
    	insert(root, 11);
    	insert(root, 9);
    
    	p = root->next;
    	while (p != NULL) {
    		if (p->next) {
    			if (p->val < p->next->val) {
    				int temp = p->val;
    				p->val = p->next->val;
    				p->next->val = temp;
    				p = root->next;
    			}
    		}
    		p = p->next;
    	}
    
    	p = root->next;
    	while (p != NULL) {
    		printf("%i\n", p->val);
    		p = p->next;
    	}
    	return 0;
    }
    

    Vielleicht kann man jemand schauen wo der Fehler ist und sich noch um die Speicherbereinigung kümmern 🙂



  • p = root->next;
        while (p != NULL) { //wie lange laeuft ein bubblesort?
            if (p->next) {
                if (p->val < p->next->val) {
                    int temp = p->val;
                    p->val = p->next->val;
                    p->next->val = temp;
                    p = root->next; //warum?
                }
            }
            p = p->next;
        }
    

    idR ist es schoener die Knoten zu tauschen statt den Werten der Knoten, da man so idR eine Menge Zeit spart.

    Und das freigeben ist auch ganz einfach: jeder knoten wurde mit malloc angelegt also muss auch ein free kommen.


Anmelden zum Antworten