Visualizzazione dei risultati da 1 a 4 su 4

Discussione: C - Alberi e liste

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760

    C - Alberi e liste

    Ho un problema con alberi e liste.Vorrei creare un albero con delle liste.Partendo da queste 2 struct come posso con la lista determinare l' elemento?

    codice:
    typedef int Tipo_chiave ;
    typedef int Tipo_el ;
     // Cambiare questa dichiarazione di tipo per avere alberi con
                         // contenuto diverso.
    
    struct Nodo {
        Tipo_chiave chiave;
        Tipo_el    inf;
        struct Nodo *sinistro;
        struct Nodo *destro;
        struct Nodo *padre;
    } Nodo;
    
    typedef struct Nodo *Albero;
    
    typedef struct Nodo *PNodo;
    
    e per la lista
    struct Nodo_lista {
    	Elemento    inf;
        struct Nodo_lista *next;
    } Nodo_lista;
    
    typedef struct Nodo_lista *Lista ;
    come posso fare per indicare un elemento dell' albero dalla lista?Es scorrere gli elementi >x ad esempio
    Grazie in anticipo e Auguri a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    nessuno mi può dire qualcosa?

  3. #3
    Ciao, al momento non ho tempo per spiegarti tutto ma ti linko una una pagina che ti puó interessare.

    http://cslibrary.stanford.edu/110/BinaryTrees.html

    Cmq la implentazione basilare é di array e puntatori cosi via..

    Spero di esserti stato di aiuto ugualmente!
    Ciao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    grazie,per array e liste daccordo,quello che mi manca è ad esempio "cercare i nodi dove il loro padre è >5"
    Per farlo dovrei fare un ciclo per l' inserimento (quindi newnode?) e poi gestire i puntatori sull' albero.
    Cosa che so fare su una lista,ma qui non so come impostare
    Ho trovato questo codice ,può essere sulla strada di quello che devo fare,mi sembra,confermate?
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    #include "bst.h"
    struct bst_node* new_node(void* data) {
        struct bst_node* result = malloc(sizeof(struct bst_node));
        result->data = data;
        result->left = result->right = NULL;
        return result;
    }
    
    
    void free_node(struct bst_node* node) {
        free(node);
    }
    
    
    
    
    
     struct bst_node** search(struct bst_node** root, comparator compare, void* data) {
         struct bst_node** node = root;
         while (*node != NULL) {
             int compare_result = compare(data, (*node)->data);
             if (compare_result < 0)
                 node = &(*node)->left;
            else if (compare_result > 0)
                 node = &(*node)->right;
             else
                 break;
         }
         return node;
     }
    
     void insert(struct bst_node** root, comparator compare, void* data) {
         struct bst_node** node = search(root, compare, data);
         if (*node == NULL) {
             *node = new_node(data);
         }
     }
    
     void delete(struct bst_node** node) {
         struct bst_node* old_node = *node;
         if ((*node)->left == NULL) {
             *node = (*node)->right;
             free_node(old_node);
         } else if ((*node)->right == NULL) {
             *node = (*node)->left;
             free_node(old_node);
         } else {
             struct bst_node** pred = &(*node)->left;
     	while ((*pred)->right != NULL) {
     	    pred = &(*pred)->right;
     	}
    
    
     	/* Swap values */
     	void* temp = (*pred)->data;
    	(*pred)->data = (*node)->data;
     	(*node)->data = temp;
    
     	delete(pred);
    
         }
     }
    
    
    
    main(){
    
    
    
    }
    bst.h
    codice:
     typedef int comparator(void* left, void* right);
    
     struct bst_node {
         void* data;
        struct bst_node* left;
         struct bst_node* right;
     };
    
     struct bst_node* new_node(void* data);
     void free_node(struct bst_node* node);
     struct bst_node** search(struct bst_node** root, comparator compare, void* data);
     void insert(struct bst_node** root, comparator compare, void* data);
     void delete(struct bst_node** node);

    Dal main però come invoco per creare?
    In insert "comparator compare" cosa significa?


    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    struct node* NewNode(int data) {
      struct node* node = new(struct node);    // "new" is like "malloc"
      node->data = data;
      node->left = NULL;
      node->right = NULL;
    
      return(node);
    }
    
    
    main(){
    
    }
    in questo invece simo mi da
    \alberi5.c||In function `NewNode':|
    \alberi5.c|5|error: syntax error before "struct"|
    \alberi5.c|6|error: dereferencing pointer to incomplete type|
    \alberi5.c|7|error: dereferencing pointer to incomplete type|
    \alberi5.c|8|error: dereferencing pointer to incomplete type|
    ||=== Build finished: 4 errors, 0 warnings ===|

    Come aggiusto?Mi manca qualcosa per poi inserire il resto,questa soluzione mi sembra più "semplice" della prima
    Grazie in anticipo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.