PDA

Visualizza la versione completa : [C] Problema teorico sulle strutture dati lista e albero binario


Geps94
09-01-2015, 09:47
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 :D

Scara95
09-01-2015, 12:52
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:

//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.

Geps94
09-01-2015, 13:03
ok chiedo scusa, provvedo subito.



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;

Scara95
09-01-2015, 15:45
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.

Geps94
09-01-2015, 15:57
Grazie per l'aiuto.
Come posso aggirare questo problema sulla lista ??

Scara95
09-01-2015, 19:21
Lasciando inutilizzato il primo nodo: lo lasci l senza che contenga alcuna informazione e lo usi solo per accedere alla lista.

Loading