Struct, Rekursive Listen ansteuern



  • // Array mit 20 Jobs vom Typ job_list
    

    Das glaube ich nicht. Du machst einen Typ und kein Array.

    Abgesehen davon wird's laufen, wenn man die Syntax-Fehler rausnimmt.
    🙂



  • auch müßtest du von 0 bis 18 gehen also

    for(i=0;i<18;i++){ 
    ...
    }
    job_list[i].next = NULL;
    
    statt
    
    for(i=1;i<19;i++ {
    

    zusammen finden wir die fehler schon 😉



  • Ich habe mal die gröbsten Dinger weggemacht, dass man mal übersetzen kann:

    #include <stdlib.h> 
    #include <stdio.h> 
    
    struct job_tag{ 
    	int process; 
    	int capacity; 
    	struct job_tag *next;     
    } job_list[20];
    
    int main(void) 
    { 
    	// die jobs mit Zeiten füllen 
    	for(int i=0; i<20; i++){ 
    		job_list[i].process=rand(); 
    		job_list[i].capacity=rand();
    	} 
    	// und jetzt das problem: zeiger setzen!!! 
    	for(int i=0;i<19;i++) { 
    		job_list[i].next=&job_list[i+1];
    	}
            job_list[19].next = 0;
    
    	return 0; 
    }
    

    Und das Schlüsselwort heißt "Verkettete Liste".

    - mach Dich außerdem mal mit Arrays/Indizierung vertraut.
    - rand() sollte man mal mit srand ( time(NULL) ) initialisieren
    - mit typedef kannst Du keine Variable deklarieren



  • ach quatsch...

    for(i=0;i<19;i++){
    


  • haha ihr seidn traum! danke!

    naja und das mit den rekursiven listen, da wollte ich wohl maln professionellen ausdruck benutzen, hab aber rekursive strukturen gemeint:)
    das mit dem rand war nur ne andeutung, benutz ich so nich...
    probiers gleich mal aus.
    danke nochmal
    änz



  • noobLolo schrieb:

    ach quatsch...

    for(i=0;i<19;i++)
    

    19 stimmt doch nicht (oder das < muss ein <= sein). mach doch besser: *for(i=0; i<sizeof(job_list)/sizeof(job_list); i++)
    🙂



  • ;fricky schrieb:

    noobLolo schrieb:

    ach quatsch...

    for(i=0;i<19;i++)
    

    19 stimmt doch nicht (oder das < muss ein <= sein). mach doch besser: *for(i=0; i<sizeof(job_list)/sizeof(job_list); i++)
    🙂

    Hast Du bemerkt, dass in der besagten Schleife job_list[i+1] verwendet wird?



  • uUuuUu schrieb:

    Hast Du bemerkt, dass in der besagten Schleife job_list[i+1] verwendet wird?

    nö, sorry. aber hardcodierte zahlenwerte im code sind trotzdem oft nicht toll. ändert er die grösse des arrays, muss er alles anpassen. dann schon lieber ein gepflegtes #define, oder so.
    🙂



  • ;fricky schrieb:

    dann schon lieber ein gepflegtes #define, oder so.

    hab mal sowas vorbereitet 😉

    ;fricky schrieb:

    #define LENGTH(arr) (sizeof(arr)/sizeof(*arr))
    
    for(i=0; i < LENGTH(job_list); i++)
    

    fein fein 😋

    und für den konkreten fall

    for(i=0; i < LENGTH(job_list)-1; i++)
    

    hui und ab c99 kann man dann auch

    #define EACH(arr,i)\
    for(int i=0; i < LENGTH(arr); i++)
    

    machen oder?



  • noobLolo schrieb:

    hui und ab c99 kann man dann auch

    #define EACH(arr,i)\
    for(int i=0; i < LENGTH(arr); i++)
    

    machen oder?

    Die Variablendeklaration im Kopf der for-Schleife ja, das Makro so wie es da steht besser nicht. 😉

    MfG,

    Probe-Nutzer


Anmelden zum Antworten