LinkedList die 2te ;)



  • so - ich glaube es ist endlich geschafft - vielleicht kann mal jemand einen Blick drüber werfen und mir bestätigen das der Code das macht was er soll

    hab ich irgendwelche schlechte Manieren, die ich mir noch unbedingt abgewöhnen sollte?

    ist der Code C99 konform (ich glaube schon)?

    #include <stdio.h>
    #include <stdlib.h>
    
    // Element der LinkedList
    struct LinkedListElement 
    { 
        int value; 
        struct LinkedListElement *next; 
    }; 
    
    // Fuegt ein Element in die LinkedList ein 
    void Insert(int value, struct LinkedListElement **LinkedList) 
    {
    	struct LinkedListElement *newElement = malloc(sizeof(struct LinkedListElement));	
    	newElement->value = value;
    	newElement->next  = *LinkedList;
    	*LinkedList = newElement;
    } 
    
    // Zeigt die Liste an 
    void Show(struct LinkedListElement *LinkedList) 
    {
        while(LinkedList != NULL) 
        { 
            printf("%d\n", LinkedList->value); 
            LinkedList = LinkedList->next;     
        } 
    } 
    
    // Loescht die LinkedList 
    void Delete(struct LinkedListElement **LinkedList) 
    { 	
    	struct LinkedListElement *tmp = NULL;
    
    	while(*LinkedList!=NULL)
    	{
    		tmp = (*LinkedList)->next;
    		free(*LinkedList);
    		*LinkedList = tmp;
    	}
    }
    
    typedef struct LinkedListElement * LinkedList; 
    
    int main(void) 
    { 
    	int i = 0;
             LinkedList Liste=NULL; 
    
    	for(i = 0; i < 100000; i++)
    	{
    		Insert(i, &Liste);
    	}
    
    	Show(Liste); 
    
    	Delete(&Liste); 
    }
    


  • Vertexwahn schrieb:

    ist der Code C99 konform (ich glaube schon)?

    mach ein return 0 in deine int main.



  • warum machst du denn das

    typedef struct LinkedListElement * LinkedList;

    erst so spät, ich mein, wenn du das direkt bei der definition vom struct einbaust, sparste du dir diese langen prototypen ;). Etwa so:

    // Element der LinkedList
    typedef struct LinkedListElement
    {
        int value;
        struct LinkedListElement *next;
    }LL;
    
    // Fuegt ein Element in die LinkedList ein
    void Insert(int value, LL **LinkedList)
    {
        LL *newElement = malloc(sizeof(LL)); 
    ..
    

    da sparste dir doch ziemlich viel tipperei.. oder ist das nicht konform? 😉



  • supertux schrieb:

    mach ein return 0 in deine int main.

    5.1.2.2.3 Program termination
    If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument;10) reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.

    das return kann ich mir also sparren

    warum machst du denn das

    typedef struct LinkedListElement * LinkedList;

    weil ich es unschön finde - ich bin davon Ausgegangen, das der der die LinkedList programmiert und der der sie benutzt zwei verschiedene Menschen sind

    Für den, der sie programmiert ist das typedef nicht besonders schön, weil man schnell vergessen könnte das man es hier mit einem Zeiger zu tun hat

    Für den Benutzer ist es schöner, wenn er einfach LinkedList Liste;
    schreiben kann

    aber das ist geschmacksache glaube ich



  • Vertexwahn schrieb:

    aber das ist geschmacksache glaube ich

    Mag sein. Aber dennoch glaube ich, dass du vergisst wer der Anwender ist: Programmierer.

    Und ich will schon wissen wann ich einen Zeiger habe und wann nicht...

    Zeiger zu verstecken ist IMHO nie eine gute Idee...



  • Vertexwahn schrieb:

    Für den, der sie programmiert ist das typedef nicht besonders schön, weil man schnell vergessen könnte das man es hier mit einem Zeiger zu tun hat

    aber mein typedef versteckt keineswegs, dass man zeiger benutzt. und es verändert auch in keinster weise das konzept, das vielleicht jemand anders die linkedlist benutzt.


Anmelden zum Antworten