Hilfe bei meiner Aufgabe....



  • Hmmm...ok...also ich weiss nicht was du mit IDE meinst...was soll das bedeuten??

    Also um ehrlich zu sein versteh ich fast alles nicht was ich genau machen soll...Prototypen in die Headerdatei usw...ich bin wie gesagt erst seit paar Tagen dabei und versuche mein bestes alles zu verstehen...wie gesagt von der Theorie her habe ich viel gelesen aber der aufbau und was nun c ist und was c++ und ach generell was ich machen muss ist für mich noch nicht wirklich klar...ich weiss das ich zu viele fragen habe aber ich dachte ich melde mich hier einmal an und schaue ob mir von euch jemand weiterhelfen kann da ich alleine komplett aufgeschmissen bin....



  • flaix01 schrieb:

    Hmmm...ok...also ich weiss nicht was du mit IDE meinst...was soll das bedeuten??

    Frag Wikipedia oder Google.

    flaix01 schrieb:

    Also um ehrlich zu sein versteh ich fast alles nicht was ich genau machen soll...Prototypen in die Headerdatei usw...

    Protoypen hast du schon einige in deiner Headerdatei. Steht auch darüber.

    Headerdatei sind die Dateien mit dem h als Daterweiterung (*.h)

    Code hat in Headerdateien nichts zu suchen.
    Schreibe deine Funktionen in die Datei linkedlist.c. Auch die Funktionen print_list und pop und ...

    flaix01 schrieb:

    ... aber ich dachte ich melde mich hier einmal an und schaue ob mir von euch jemand weiterhelfen kann da ich alleine komplett aufgeschmissen bin.

    Das ist auch in Ordnung. - Wenn du gezielte Fragen hast.
    Aber wir machen hier keine Haus- oder Projektaufgaben. Und wir können dir auch nicht das Programmieren beibringen.
    Dafür gibt es Bücher. Die sind besser als dutzende Tutorials.


  • Mod

    flaix01 schrieb:

    Echt ist das C++??

    Es ist nicht wirklich C++. Es sieht schon aus als wollte da jemand C machen, aber aus Unwissenheit hat er C++ mit eingestreut. Da dein Compiler offensichtlich im C++-Modus ist, hat er dies dann auch geschluckt. Das ist natürlich nicht so gut, zumal viel legales C (inzwischen) kein legales C++ ist.



  • Hallo,

    also IDE ist umgestellt bzw. war auf C

    habe den hoffentlich richtigen Code in die linkedList.c hineingeschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    #include "linkedList.h"
    #include "assert.h"
    
    linkedList* linkedList_generate(){
    }
    
    void linkedList_addToFront(linkedList* list,intptr_t data){
    
    		  node* tmp = new Node();
    		  tmp -> data = data;
    		  tmp -> next = head;
    		  head = tmp;
    
    }
    
    void linkedList_addToEnd(linkedList* list,intptr_t data){
    	node* tmp = new Node();
    		  tmp -> data = data;
    		  tmp -> next = tail;
    		  tail = tmp;
    }
    
    void linkedList_RemoveFromFront(linkedList* list){
    	 node* temp;
    		     if(first == NULL)
    		     {
    		         cout<<"\nSingly Linked list is empty";
    		         return;
    		     }
    		     if(first->link == NULL)      //to check if only one node is present
    		     {
    		         temp = first;
    		         first = NULL;
    		         cout<<"\nDeleted node: "<<temp->data;
    		         free(temp);
    		      }
    		     else             //If more than one nodes are present
    		     {
    		         temp = first;
    		         first = first->link;
    		         cout<<"\nDeleted node: "<<temp->data;
    		         free(temp);
    		      }
    }
    
    //note: This will have o(n) complexity
    void linkedList_RemoveFromEnd(linkedList* list){
    	 if(head != NULL){
    		            ListNode *end = head;
    		            ListNode *prev_end;
    		            while(end->next != NULL){
    		                    prev_end = end;
    		                    end = end->next;
    		            }
    		            prev_end->next = NULL;
    		            if(end != NULL) delete end;
    		            size--;
    		    }
    }
    
    void linkedList_free(linkedList* list){
    	int retval = -1;
    		    node_t * next_node = NULL;
    
    		    if (*head == NULL) {
    		        return -1;
    		    }
    
    		    next_node = (*head)->next;
    		    retval = (*head)->val;
    		    free(*head);
    		    *head = next_node;
    
    		    return retval;
    }
    
    void linkedList_print(linkedList* list){
    	node_t * current = head;
    
    		    while (current != NULL) {
    		        printf("%d\n", current->val);
    		        current = current->next;
    		    }
    }
    
    //callenges:
    
    // -- tests --
    //	note: important to test for memory leaks also,
    //  use valgrind
    void testList(){
    	linkedList* list = linkedList_generate();
    
    	for(size_t s = 0;s < 20; s++){
    		linkedList_addToFront(list,1);
    	}
    
    	for(size_t s = 0;s < 20; s++){
    		linkedList_addToEnd(list,2);
    	}
    	linkedList_free(list); //check for memory leaks
    
    	linkedList* num = linkedList_generate();
    	linkedList_addToFront(num,2);
    	linkedList_addToFront(num,1);
    	linkedList_addToEnd(num,3);
    	linkedList_addToEnd(num,4);
    	//num: 1 -> 2 -> 3 -> 4
    
    	node* curr = num->head;
    	for(intptr_t i = 1;i<=4;i++){
    		assert(curr->data == i);
    		curr = curr->next;
    	}
    
    	linkedList_RemoveFromEnd(num);
    	//num: 1 -> 2 -> 3
    	curr = num->head;
    	for(intptr_t i = 1;i<=3;i++){
    		assert(curr->data == i);
    		curr = curr->next;
    	}
    
    	linkedList_RemoveFromFront(num);
    	//num: 2 -> 3
    	curr = num->head;
    	for(intptr_t i = 2;i<=3;i++){
    		assert(curr->data == i);
    		curr = curr->next;
    	}
    
    	linkedList_RemoveFromFront(num);
    	linkedList_RemoveFromFront(num);
    	assert(num->head == NULL);
    	assert(num->tail == NULL);
    	linkedList_free(num);
    }
    

    In meiner linkedList.h muss ich so wie ich euch verstanden habe die jeweiligen Header-typen einfügen für meine Variablen/Funktionen die ich brauche?!?!?!?!

    #ifndef LINKEDLIST_H 
    #define LINKEDLIST_H
    #include <stdint.h> 
    
    typedef struct node{
    	intptr_t data; //signed integer type which is guaranteed to be able to hold an address
    	struct node *next;		//insert code here
    
    }node_t;
    
    typedef struct node *next{
    		//insert code here....
    
    }linkedList;
    
    //prototypes of the functions that have to be implemented
    linkedList* linkedList_generate();
    void linkedList_free(linkedList* list);
    void linkedList_addToFront(linkedList* list,intptr_t data);
    void linkedList_addToEnd(linkedList* list,intptr_t data);
    void linkedList_RemoveFromFront(linkedList* list);
    void linkedList_RemoveFromEnd(linkedList* list);
    void linkedList_print(linkedList* list,PrintMode mode);
    
    //--tests -- 
    void testList();
    #endif
    

    aber wie genau ich das machen muss da bin ich im moment noch nicht ganz auf dem richtigen Weg...


  • Mod

    Ist schon der richtige Weg. Bei deinem Header musst du noch die Syntax korrigieren:

    #ifndef LINKEDLIST_H
    #define LINKEDLIST_H
    #include <stdint.h>
    
    typedef struct node{
        intptr_t data; //signed integer type which is guaranteed to be able to hold an address
        struct node *next;      
    }node_t;
    
    typedef struct node* linkedList;
    
    //prototypes of the functions that have to be implemented
    linkedList* linkedList_generate();
    void linkedList_free(linkedList* list);
    void linkedList_addToFront(linkedList* list,intptr_t data);
    void linkedList_addToEnd(linkedList* list,intptr_t data);
    void linkedList_RemoveFromFront(linkedList* list);
    void linkedList_RemoveFromEnd(linkedList* list);
    void linkedList_print(linkedList* list,PrintMode mode);
    
    //--tests --
    void testList();
    #endif
    

    Wobei hier noch eine Definition fehlt, was PrintMode ist.

    In deiner Sourcedatei sind noch eine Menge Fehler:
    -Du musst auch die Bezeichner aus deinem Header nutzen, du nutzt zum Beispiel in der einen Datei node_t in der anderen node.
    -Da ist noch sehr viel C++ drin. new ist C++, cout ist C++ und vieles mehr.
    -Es sind auch noch haufenweise andere Fehler drin. Sowohl von der Syntax her, als auch von der Programmlogik. Diese aufzulisten macht aber wenig Sinn, bevor die anderen Sachen nicht behoben sind.



  • Also ich habe node_t und node...einheitlich geändert zu node_t

    Kann ich leider nicht über google finden wie ich PrintMode definieren kann komme nur auf Seiten die was mit Drucken zu tun haben usw aber nicht mit dem C-Befehl dafür....

    Das next und new usw..nicht C sonder C++ ist habe ich soweit in Kenntnis genommen nur was mir fehlt sind die dazugehörigen C Befehle...kennt jemand eine gute Seite dazu...hier hat eine Google Suche auch nicht das gebracht was es sollte....



  • PrintMode ist ein selbst definierter Variablentyp. Den gibt es nicht im C-Standard.
    Du musst wissen wo der her kommt, schließlich benutzt du ihn.

    Es gibt keine guten und vollständigen C-Tutorials im Netz.
    Eine Übersicht bringt dir wenig, wenn du nicht weißt, was das bedeutet.
    Du brauchst ein Buch, dass du durchlesen musst. Auch mehrmals.

    Aber du kannst bei http://www.cplusplus.com/reference/clibrary/ oder http://en.cppreference.com/w/ nachschauen. Da sind auch die Funktionen der C-Standardlibrary beschrieben



  • Danke für die Links sind sehr hilfreich nur leider verstehe ich immer noch nicht wie bzw was ich genau mit dem PrintMode machen muss wo einfügen und was genau also die def. wie sollte die sein wenn das kein Variablentyp ist....

    Stimmen eigentlich die Teile für Knoten einfügen usw.??? wenn es heisst das next und cout usw kein C ist sondern C++ bin ich da komplett auf dem falschen weg oder kann ich es so weiter benutzen nur muss ich die Befehle ersetzen???


  • Mod

    Irgendwie macht das herzlich wenig Sinn, deine Fragen zu beantworten, wenn du nicht richtig C sprichst. Du würdest die Antworten nicht verstehen. Der erste Schritt einer Antwort wäre sogar, erst einmal deine Fragen zu korrigieren, da diese selber nicht wirklich Sinn machen. Beispielsweise hat niemand je gesagt, next wäre C++. Alleine die Vorstellung ist absurd, da next ein structmember ist. Was dir anscheinend nicht klar ist.
    Auch die Idee, Befehle zwischen C und C++ auswechseln zu können ist gewagt. Schon der Begriff des "Befehls" ist in C und C++ eher unpassend.

    Der beste Tipp ist daher wohl, dich auf gutes Lehrmaterial für Anfänger zu verweisen:
    http://www.c-plusplus.net/forum/300567



  • OOOOhje das hört sich so an als sollte ich lieber aufgeben...habe nochmal die Nacht über die ganze Theorie reingedrückt aber es scheint kein Ende in Sicht zu sein....es gibt soviele Fehler ich weiss gar nicht wie und wo ich anfangen soll...aber danke für eure Hilfe


Anmelden zum Antworten