Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] albero di void

  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    albero di void

    volevo fare un albero di puntatori a void. ora, l'inserimento va, cioč nn da errori, ma secondo me nn salva nulla, la stampa invece nn so come implementarla..

    codice:
    tree.h 
    
    #ifndef TREE_H
    #define TREE_H
    struct nodo;
    
    typedef nodo * tree;
    typedef void * elemento ;
    
    struct nodo{
     elemento item;
     tree left;
     tree right;
    };
    
    void init(tree & );
    int inserisci(tree &,elemento );
    void stampa(tree );
    
    #endif
    codice:
    tree.cpp 
    using namespace std;
    #include <iostream>
    #include "tree.h"
    
    void init(tree & t){
     t = NULL;
    }
    
    int inserisci(tree & t,elemento it){
    elemento e;
     if (t==NULL){
      t=new nodo;
      if (t==NULL) return 0;
     }
     else {
      if (t->item==NULL) {
       e = new elemento;
       if (e==NULL) return 0;
       e=it;
       t->item=e;
       t->left=NULL;
       t->right=NULL;
       }
      else if (it>t->item) return inserisci (t->right,it);
           else return inserisci (t->left,it);
     }
    }
    
    void stampa(tree t){
     if (t!=NULL){
      stampa(t->left);
      cout << (int)t->item << endl;
    
      stampa(t->right);
     }
    }
    codice:
    main.cpp 
    using namespace std;
    #include <iostream>
    #include "tree.h"
    
    
    int main(){
    tree t;
    int ele;
    init(t);
    ele=100;
    inserisci(t,&ele);
    stampa(t);
    return 1;
    }

  2. #2
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    nel titolo della discussione bisogna indicare il linguaggio utilizzato, come da regolamento
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nč quando nč da dove,
    t'amo direttamente senza problemi nč orgoglio:
    cosģ ti amo perchč non so amare altrimenti

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    a si lo sapevo bem ma mi son dimenticato .. se puoi (e vuoi) cambialo tu!

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Questa dovrebbe essere corretta:

    Codice PHP:
    int inserisci(tree telemento it){
         if (
    == NULL){
             
    = new nodo;
             
    -> item it;
             return 
    1;
         }
         if(
    it -> item)
              return 
    inserisci(-> right,it);
         if(
    it -> item)
              return 
    inserisci(-> left,it);
         return 
    1;

    Nota che poichč gli elementi sono di tipo void *, facendo i confronti stai semplicemente confrontatno di puntatori, non i valori puntati, il che non ha molto senso. Per fare queste funzioni generiche hai bisogno di passare tra gli argomenti anche una funzione di confronto che fa il confronto vero e proprio e che sarą implementata diversamente di volta in volta in base al tipo effettivo degli elementi. Lo stesso vale per la stampa. La funzione dovrebbe allora essere:

    Codice PHP:
    int inserisci(tree telemento itint (*confronta)(void *, void *)){
         if (
    == NULL){
             
    = new nodo;
             
    -> item it;
             return 
    1;
         }
         if(
    confronta(it-> item) == 1)
              return 
    inserisci(-> right,it);
         if(
    confronta(it-> item) == -1)
              return 
    inserisci(-> left,it);
         return 
    1;

    il paramentro "confronta" č un puntatore ad una funzione che prende due void* e restituisce 1, -1 o zero rispettivamente se il primo č maggiore, minore o uguale al secondo. Cosi ad esempio, se fai un albero di interi puoi definire una funzione

    Codice PHP:
    int confronta_interi(void avoid b){
         if(*
    > *b)
            return 
    1;
         if(*
    < *b)
            return -
    1;
         return 
    0;

    e poi chiamare la funzione di inserimento cosi:

    inserisci(t, it, confronta_interi);

    se invece fai un albero di puntatori ad un altro tipo di oggetti, ad esempio delle stringhe che vanno confrontate lessicograficamente, devi definire una funzione confronta_stringhe da passare ad inserisci. Analogamente devi creare delle funzioni diverse per la stampa di un singolo elemento, ad esempio stampa_intero o stampa_stringhe, e che saranno passate come parametro alla funzione di stampa dell'albero.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    dopo c provo e t faccio sapere.. grazie per ora!

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.