|
|||||||
|
|
|
![]() |
|
|
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: 05:13.



















