Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C] Liste e nodi

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Liste e nodi

    Salve a tutti, vorrei porvi alcune domande riguardo la gestione delle liste. In particolare:
    - una lista è un vettore di nodi
    -ogni nodo è un tipo strutturato "t_node" che contiene un'informazione utile "info" di tipo" t_info" e un riferimento per spostarsi al prossimo nodo "link" di tipo "t_node*".
    Supponiamo che la info di ogni nodo sia strutturata come :
    codice:
       struct s_nodo
    	{
    		int eta;
    		struct s_nodo* next;
    	};
    .. che io voglia creare una lista di N nodi con delle "eta" lette da tastiera.
    Definisco il tipo "t_nodo"
    codice:
    typedef struct s_nodo t_nodo;
    e quindi definisico il tipo "t_lista" della lista, ricordando che una lista è identificata dal puntatore al suo primo nodo:
    codice:
    typedef t_nodo* t_lista;
    ...e la dichiaro:
    codice:
    t_lista lista;
    A questo punto, per creare la lista VUOTA inizializzo a NULL il puntatore:
    codice:
    lista=NULL;
    Ora come devo fare a creare gli N nodi? Il prototipo della funzione è :
    codice:
    t_nodo*node_create(t_info);
    che restituisce un puntatore al tipo t_nodo, quindi in pratica, nel creare più nodi, non faccio altro che creare un vettore di nodi ( che è una lista ). Successivamente devo far puntare "lista" al primo elemento del vettore di nodi o al vettore di nodi intero??
    Qualcuno potrebbe chiarirmi le idee?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    1) crea il nuovo nodo con la malloc

    2) scorri la lista a partire dall'inizio fino al puntatore NULL che sostituirai con il puntatore al nuovo nodo
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Originariamente inviato da oregon
    1) crea il nuovo nodo con la malloc
    ma quindi alloco spazio ad un puntatore a t_nodo di dimensione pari al numero di nodi?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non pari al "numero di nodi" (dato che il nodo da aggiungere è uno) ma alle dimensioni di un nodo ovvero sizeof(t_nodo)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Mettiamo caso che voglio leggere da tastiera le informazioni riguardo tre persone, dove ogni informazione è formata da nome, cognome ed età. E voglio inserire questi dati in una lista che conterrà 3 nodi...come devo fare?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti ho detto come fare per un solo nodo. Ripeti la procedura tre volte con un ciclo for.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Purtroppo non ci riesco Se la lista è un vettore di nodi, allora per spostarmi da un nodo all'altro non basta che incremento semplicemente l'indice? Non potresti farmi un esempio?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    codice:
    int main()
    {
    	struct s_node
    	{
    		int utile;
    		struct s_node* link;
    	};
    	typedef struct s_node t_node;
    	typedef t_node *t_list;
    	t_list lista;
    	lista=NULL;
    	t_node *new_node;
    	new_node=(t_node*)malloc(sizeof(t_node));
    	new_node->utile=10;
    	new_node->link=NULL;
    	lista=new_node;
    	printf("%d\n",(*lista).utile);
    	new_node=(t_node*)malloc(sizeof(t_node));
    	new_node->utile=20;
    	new_node->link=NULL;
    	(*lista).link=new_node;
    	printf("%d\n", *((*lista).link));
    	new_node=(t_node*)malloc(sizeof(t_node));
    	new_node->utile=30;
    	new_node->link=NULL;
    	(*((*lista).link)).link=new_node;
    	
    	return EXIT_SUCCESS;
    }
    Ho scritto questo, e sembra andare, ma ho la sensazione che non sia normale l'aggiunta di un operatore di dereferenziamento per ogni aggiunta di nodo

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho controllato il codice ma quello che devi fare prima di tutto è scrivere una funzione generica per l'aggiunta di un nuovo nodo da chiamare quando ti serve (come negli appunti che ti ho mostrato).

    Non devi ripetere lo stesso codice nel main più volte!

    Per la visualizzazione dei dati, dovrai fare una funzione generica per la ricerca che "attraversi" la lista e arrivi al tuo dato (sempre negli appunti), sicuramente non tutto "staticamente" nel main!

    P.S. La struct e le typedef mettile fuori dal main e queste

    t_list lista;
    lista=NULL;

    le scrivi direttamente

    t_list lista = NULL;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.