Einfach Verkettete Listen
-
Ich grüße Euch!
Ich versuche zur Zeit einfach verkettete lineare Listen zu programmieren. Ich habe mir vorgenommen drei Funktionen zumachen eine "einfügen" Funktion eine "löschen" Funktion und eine "finden" Funktion. Ich hab schon mal die einfügenfunktion programmiert nur zeigt mein Compiler mir sehr viele Fehler an und ich weis leider nicht an was es liegt obwohl denk ich von der Syntay her alles korrekt sein sollte. Vielleicht könnt Ihr mir helfen den "mysteriösen" Fehler zu finden.
Hier mal den gesamten Code .:
#ifndef _EINFUEGEN #define _EINFUEGEN #include "einfuegen.h" #include "global.h" #endif void einfuegen(ListEl **list, int intVal){ ListEl *neu, *nachf, *vorg; neu = (ListEl *) malloc(sizeof(ListEl)); neu->val = intVal; if(*list == NULL || intVal < (*list)->val){ neu->next = *list; *list = neu; }else{ vorg = *list; nachf = (*list)->next; while(nachf != NULL && nachf->val < intVal){ vorg = vorg->next; nachf = nachf->next; } neu->next = nachf; vorg->next = neu; } }//end of einfuegen
Und hier die global.h die Header von der main:
#ifndef _MAIN_INC #define _MAIN_INC #include <stdio.h> #include <stdlib.h> #endif struct ListElement{ int val; struct ListElement *next; }; typedef struct ListElement ListEl; ListEl *first=NULL;
-
Die Fehlermeldungen könnten vielleicht hilfreich sein...
-
er kann zum Beispiel ListEL nicht finden obwohl alles richtig deklariert ist
-
Nighthawk_1 schrieb:
er kann zum Beispiel ListEL nicht finden obwohl alles richtig deklariert ist
a) Gibt der Compliler doch bestimmt was aus, oder?
b) deklariert man unter C Strukturtypen etwas anders:
typedef struct{ int val; struct ListElement *next; }ListElement;
So wie Du es machst, geht es unter C++.
-
Hm, ich bin jetzt verwirrt oder hängt es das ich nicht mein global.h nicht richtig implementiert??
Der Compiler spuckt:
error C2065: 'ListEl': nichtdeklarierter Bezeichner
error C2065: 'list': nichtdeklarierter Bezeichner
error C2062: 'int'-Typ unerwartet
error C2378: 'ListEl': Neudefinition; Symbol kann nicht mit typedef überladen werden
error C2143: Syntaxfehler: Es fehlt ';' vor '*'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt usw..... sau viele Fehler obwohl der Code stimmt....
-
Hmm, kann es sein, dass da ein Include-Lock fehlt, in Deinem global.h?
#ifndef __HEADER_INCLUDED__ #define __HEADER_INCLUDED__ //Deklarationen #endif //__HEADER_INCLUDED__
Ansonsten habe ich Blödsinn geschrieben. So wie Du Deine Struktur anlegst, ist es richtig.
-
Tachyon schrieb:
b) deklariert man unter C Strukturtypen etwas anders:
typedef struct{ int val; struct ListElement *next; }ListElement;
So wie Du es machst, geht es unter C++.
nope, so wie er es gemacht hat, ist auch in C ok. Du bist derjenige, der einen Fehler hat:
typedef struct listelement{ /// siehe hier int val; struct listelement *next; /// und hier }ListElement;
-
hm, ich weis nicht ganu was du meinst aber ich denke das es richtig ist oder? Aber schau dir mal bitte (Tachyon) die Datei deklaration bei meiner einfuegen.h an:
#ifndef _EINFUEGEN_INC #define _EINFUEGEN_INC #include <stdio.h> #include <stdlib.h> #endif void einfuegen(ListEl **list, int intVal);
-
@supertux: Siehe oben, ich habe mich bereits korrigiert. Trotzdem danke.
Nighthawk_1 schrieb:
hm, ich weis nicht ganu was du meinst aber ich denke das es richtig ist oder? Aber schau dir mal bitte (Tachyon) die Datei deklaration bei meiner einfuegen.h an:
#ifndef _EINFUEGEN_INC #define _EINFUEGEN_INC #include <stdio.h> #include <stdlib.h> #endif void einfuegen(ListEl **list, int intVal);
Hmm, irgendwie ist das so merkwürdig.
Ich kenne das irgendwie so:
Beispiel global.h#ifndef __GLOBAL_H__INCLUDED #define __GLOBAL_H__INCLUDED #include <stdio.h> #include <stdlib.h> struct ListElement { int val; struct ListElement *next; }; typedef struct ListElement ListEl; #endif //__GLOBAL_H__INCLUDED
Ansosnten wird nicht sichergestellt, dass Dein Header nur einmal eingebunden wird, und es kann zu Mehrfachdeklarationen kommen.
-
Danke dir Tachyon jetzt funzt es hut ab!!