|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Aiuto su stack mediante liste
Ho bisogno di aiuto riguardo le operazioni di push e pop che non ho molto capito.
void push(data d, stack *stk){ elem *p; p=malloc(sizeof(elem)); p->d=d; p->next=stk->top; stk->top=p; stk->cnt++; } data pop(stack *stk){ data d; elem *p; d=stk->top->d; p=stk->top; stk->top=stk->top->next; stk->cnt--; free(p); return d; } In entrambe non riesco a capire perché p deve andare a puntare stk->top e stk->top deve andare a puntare p; che stk->top deve puntare a p forse l'ho capito (dato che p viene posto in cima alla lista). Ma perché anche il contrario? Grazie. ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
posta le strutture stack e elem
ps: usa il tag [C0DE] [/C0DE] (con la o al posto dello 0) per inserire il codice |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Codice:
struct elem{ data d; struct elem *next; }; typedef struct elem elem; struct stack{ int cnt; elem *top; }; typedef struct stack stack; |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
Per implementare uno stack con le liste concatenate il metodo più semplice è quello di inserire e togliere gli elementi all'inizio della lista.
Se tu hai questa lista: Codice:
stk->cnt = 3 stk->top | v primo->next -----> secondo->next -----> terzo->next=NULL p->next=stk->top; // stk->top punta al primo elemento della lista poi stk->top dovrà puntare al primo elemento della lista aggiornata, che ora è p: stk->top=p; dopo l'inserimento avrai questa situazione: Codice:
stk->cnt = 4 stk->top | v p->next -----> primo->next -----> secondo->next -----> terzo->next=NULL |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie mille ora ho capito
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:40.