Domanda
Qualcuno può spiegare questo?
struct node
{
int data;
struct node * link;
}
main()
{
struct node *p, *list, *temp;
list = p = temp = NULL;
.........................
.........................
}
addbeg()
{
int x;
temp=malloc(sizeof(struct node));
scanf("%d", &x);
temp->data=x;
temp->link = list;
list=temp;
}
Questo è un codice per l'immissione di dati nell'elenco collegato tramite il linguaggio C. Il codice non è completo, ma penso che sia abbastanza per lo scopo. Spiega la codifica in sostanza queste righe:
temp=malloc(sizeof(struct node));
e
temp->link = list;
list=temp;.
Soluzione
malloc ()
è usato per allocare memoria - in questo caso per un nuovo nodo.
La funzione addbeg ()
definita nel tuo codice effettua le seguenti operazioni:
- Definisce una variabile temporanea
x
. - Alloca lo spazio per un nuovo nodo.
- Immette un numero intero (
% d
inscanf
) e lo memorizza inx
. - Memorizza il valore che è stato salvato in
x
nel campo dati del nodo appena allocato. - Memorizza la vecchia "testa" dell'elenco indicato dalla variabile "
list
" come collegamento nel nodo appena assegnato. - Imposta il nuovo nodo come nuovo capo dell'elenco memorizzato nella variabile "
list
".
È un'implementazione di base di un elenco collegato ( http://en.wikipedia.org/wiki / Linked_list ) di numeri interi.
Altri suggerimenti
prima riga: alloca memoria per un singolo nodo aggiuntivo dell'elenco.
seconda riga: collega l'elenco corrente come continuazione dopo questo elemento.
terza riga: imposta l'elemento corrente all'inizio di un elenco.
temp e list non sono visibili in addbeg, poiché sono dichiarati in main. Devono essere passati in addbeg o dichiarati al di fuori del main (globale, yuck).
malloc alloca lo spazio per un nuovo nodo.
temp->link = list
e
list = temp
rende quel nuovo nodo il capo della tua lista.