2010-07-22 13 views
12

Qualcuno potrebbe indirizzarmi ad un tutorial su Tree Data Structures usando C. Ho provato googling ma la maggior parte delle implementazioni sono per C++ o Java.Se qualcuno mi può indirizzare ad alcuni tutorial online che sono in C sarebbe bello.Esercitazione per struttura dei dati dell'albero in C

Grazie ..

+0

Leggere qualsiasi documento DATI STRUTTURA. – Tauquir

+0

Guarda sotto la sezione 4 in https://ece.uwaterloo.ca/~ece250/Lectures/Slides/ Il sito ha molte altre strutture dati e implementazioni di algoritmi e spiegazioni su di loro e il loro tempo di esecuzione/analisi asintotica – rrazd

risposta

1

Ecco un po 'di codice di tutorial da un paio di decenni fa. In effetti, è rimasto in giro così a lungo, non ricordo da dove venisse o chi lo ha scritto (avrei potuto essere io, ma non sono proprio sicuro). In teoria è un po 'non portatile, usando strdup, che non fa parte della libreria standard, sebbene la maggior parte dei compilatori lo abbia/fornisca.

/* Warning: untested code with no error checking included. */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

/* A tree node. Holds pointers to left and right sub-trees, and some data (a string). 
*/ 
typedef struct node { 
    struct node *left; 
    struct node *right; 
    char *string; 
} node; 

node *root; /* pointers automatically initialized to NULL */ 

int insert(const char *string, node *root) { 

    /* Add a string to the tree. Keeps in order, ignores dupes. 
    */ 
    int num = strcmp(root->string, string); 
    node *temp; 

    for(;;) { 
     if (0 == num) 
      /* duplicate string - ignore it. */ 
      return 1; 
     else if (-1 == num) { 
      /* create new node, insert as right sub-tree. 
      */ 
      if (NULL == root -> right) { 
       temp = malloc(sizeof(node)); 
       temp -> left = NULL; 
       temp -> right = NULL; 
       temp -> string = strdup(string); 
       return 2; 
      } 
      else 
       root = root -> right; 
     } 
     else if (NULL == root ->left) { 
      /* create new node, insert as left sub-tree. 
      */ 
      temp = malloc(sizeof(node)); 
      temp -> left = NULL; 
      temp -> right = NULL; 
      temp -> string = strdup(string); 
      return 2; 
     } 
     else 
      root = root -> left; 
    } 
} 


void print(node *root) { 
    /* in-order traversal -- first process left sub-tree. 
    */ 
    if (root -> left != NULL) 
     print(root->left); 
    /* then process current node. 
    */ 
    fputs(root->string, stdout); 

    /* then process right sub-tree 
    */ 
    if (root->right != NULL) 
     print(root->right); 
} 

int main() { 

    char line[100]; 

    /* Let user enter some data. Enter an EOF (e.g., ctrl-D or F6) when done. 
    */ 
    while (fgets(line, 100, stdin)) 
     insert(line, root); 

    /* print out the data, in order 
    */ 
    print(root); 
    return 0; 
} 
+1

@ Jerry..ho cercato più per qualche tutorial piuttosto che il codice effettivo. Volevo avere una buona presa sui concetti e poi provarlo da me stesso ... Comunque grazie !!! –

+0

@The Stig: Ah, ma questo è puramente un punto di partenza - al momento non supporta la ricerca di valori particolari (dovrebbe essere piuttosto facile), la cancellazione (in qualche modo non banale), il mantenimento dell'equilibrio (* decisamente * non banale), eccetera. –

Problemi correlati