Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Problema teorico sulle strutture dati lista e albero binario

    Salve a tutti,
    la domanda che mi assilla è la seguente:
    fino ad oggi ho sempre visto due modelli di funzioni per queste due strutture dati, quello procedurale (passo la struttura alla funzione e la faccio restituire modificata ES: Ttree bst_create(Ttree)), oppure un modello funzionale in cui ragiono con i puntatori
    Es: void bst_create(Ttree*).
    Ora mentre faccio una prova d'esame mi ritrovo una funzione di questo tipo:
    bool aggiungi_paziente(TBinaryTree albero, TList lista, TQueue *coda, TInfoAlbero info);
    la quale dovrebbe fare le seguenti cose se la lista è vuota aggiungo il nuovo paziente (che sarebbe la info) all'albero e tolgo un posto disponibile dalla lista, invece se la lista è piena metto il paziente nella coda.
    la mia domanda è visto che in ogni caso questa funzione modifica le strutture dati che passo alla funzione dal main non dovrei passare il puntatore a queste strutture??? poichè se le passassi per valore le eventuali modifiche apportate dalla funzione non modificano le variabili del main ??
    Grazie a tutti per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Hai un'idea distorta di procedurale e funzionale, ma tralasciamo.
    Per rispondere alla tua vera domanda non basta ciò che hai scritto serve tutta la definizione dei tipi.
    Ti faccio un esempio:
    codice:
    //definizioni di TInfoAlbero e TQueue
    //...
    struct TListNode_st {
      //elemento
      struct TListNode_st *next;
    };
    typedef struct TListNode_st TListNode;
    
    struct TList_s_st {
      TListNode *head;
      //altri elementi di supporto
    };
    
    typedef struct TList_s_st TList_s;
    typedef TList_s * TList;
    
    //analogo per l'albero
    In ogni caso il problema si pone solo nel caso in cui tu debba sostituire al primo nodo della lista un nodo diverso.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    ok chiedo scusa, provvedo subito.

    codice:
    typedef struct info_list{
          elementi vari....
          } Tinfo_list;
    
    struct Snode_list{
          Tinfo_list info;
          struct Snode*next;
          }
    typedef struct Snode_list Tnode_list;
    typedef Tnode_list* Tlist;
    
    
    
    typedef struct info_tree{
          elementi vari....
          } Tinfo_tree;
    
    struct Snode_tree{
          Tinfo info_tree;
          struct Snode_tree*left;
          struct Snode_tree*right;
          }
    typedef struct Snode_tree Tnode_tree;
    typedef Tnode_tree* Ttree;
    Ultima modifica di LeleFT; 09-01-2015 a 14:29 Motivo: Aggiunti i tag CODE

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Per come sono state dichiarate puoi modificare qualsiasi elemento della lista/array, l'unica cosa che non puoi fare è sostituire il primo nodo con un nodo diverso.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Grazie per l'aiuto.
    Come posso aggirare questo problema sulla lista ??

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Lasciando inutilizzato il primo nodo: lo lasci lì senza che contenga alcuna informazione e lo usi solo per accedere alla lista.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2024 vBulletin Solutions, Inc. All rights reserved.