Ich versuche, Baumalgorithmen in C zu implementieren. Ich habe eine externe Struktur in einer Header-Datei deklariert, die völlig unabhängig ist (b_tree_ds.h). Jetzt plane ich, die Datei in alle Quelldateien zu importieren, die diese Struktur verwenden möchten. Also muss ich es mit extern im Header deklarieren.
Jetzt ist das Problem, dass ich auch seine Typedef definieren möchte. Der Compiler gibt einen Fehler mehrerer Speicherklassen aus. Wie soll ich das machen.
typedef extern struct node {
struct node* left;
struct node* right;
int key; // contains value
}NODE;
Das eigentliche Problem ist folgendes, das ich immer noch nicht beheben kann??? Ich habe kürzlich gelernt, wie wir mehrere Quelldateien mit Header-Dateien verwenden können, um Code portabel und hierarchisch zu machen. Um dies zu tun, habe ich es satt, mein Baumprogramm mit diesem Prinzip zu erstellen. Hier sind meine Dateien
b_tree_ds.h – Dies enthält a Erklärung der Datenstruktur des Knotens eines Baums, der für verschiedene Funktionen aufgerufen werden kann, die unterschiedliche Funktionen des Baums implementieren (die sich in verschiedenen Quelldateien befinden können)
typedef struct node {
struct node* left;
struct node* right;
int key; // contains value
}NODE;
Wenn ich versuche, ein externes wie in typedef hinzuzufügen extern struct node
Es gibt einen Fehler mehrerer Speicherklassen, aber wenn ich ihn verpasse, erhalte ich einen Fehler für mehrere Definitionen.
Hier sind meine anderen Quelldateien
traverse.h – enthält die Deklaration der Traverse-Funktion
void traverse_print (NODE* p);
Auch hier bekomme ich einen Fehler für den unbekannten Bezeichner NODE
traverse.c – enthält die Definition dieser Funktion
#include <stdio.h>
#include "b_tree_ds.h"
#include "traverse.h"
void traverse_print(NODE* p)
{
if(p->left != NULL)
{
traverse_print(p->left);
}
if (p->right != NULL)
{
traverse_print(p->right);
}
printf ("\n%d",p->key);
}
Endlich main.c
#include <stdio.h>
#include "traverse.h"
void main()
{
// input
NODE p;
printf("\nInput the tree");
input_tree (&p);
printf("\n\nThe tree is traversing ...\n")
traverse_print(&p);
}
void input_tree (NODE *p)
{
int in;
int c;
NODE *temp;
printf("\n Enter the key value for p: ");
scanf("%d", &in);
p->key =in;
printf ("\n\nIn relation to node with value %d",in);
printf ("Does it have left child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
printf ("\n\nIn relation to node with value %d",p->key);
printf ("\nDoes it have right child (Y/N): ")
if ((c = getchar()) == Y);
{
//assign new memory to it.
temp = (NODE *)malloc(sizeof(NODE));
input_tree(temp);
}
}
Dies ist mein erster Versuch einer solchen Praxis. Bitte schlagen Sie vor, ob die Strukturierung meines Programms gut ist oder ob ich etwas anderes versuchen sollte.