L'esercizio è un ADT (Abstruct Data Type) che simula una pila (stack) utilizzando la struttura dinamica chiamata lista.
codice:
struct node {
int info;
struct node * next;
}
Questa parte dichiara un RECORD contenente due tipi di campi o fields: un intero, che poi sarebbe l'elemento della pila, e il puntatore alla struttura.
codice:
struct node * insert_new_element (struct node * p, int i) {
struct node * q;
q = (struct node *) malloc (sizeof (struct node));
q -> next = p;
q -> info = i;
return (q);
}
Questo è il push, che non fà altro che restituire il nuovo indirizzo del top dello stack.
codice:
struct node * delete_one_element(struct node * p, int * i) {
struct node * q;
* i = p-> info;
q = p -> next;
free (p);
return (q);
}
Questo è il pop che restiruisce l'indirizzo della nuova cima dello stack, e assegna al elemento passato per riferimento (int * i), il valore che si trovava nella cima dello stack.
-> equivale al ^. del Turbo Pasquale.
In questo programma conviene comunque mettere dei controlli del tipo "se lo stack è vuoto", "se lo stack è pieno" prima di procedere con le operazioni di pop o di push.