typedef struct libro { char titolo[20]; char autore[40]; ... struct libro *succ; // puntatore all'elemento successivo } libro_t;
libro_t *add(libro_t *c, char *titolo, ...) { // allocazione nuovo elemento libro_t *n = (libro_t *) malloc(sizeof(libro_t)); strcpy(n->titolo, titolo); ... n->succ = NULL; // ricerca ultimo elemento della coda libro_t *u = last(c); // inserimento nuovo elemento come ultimo della coda if (u != NULL) u->succ = n; else c = n; return c; }
libro_t *remove(libro_t *c) { libro_t *p = c; if ( c != NULL) { c = c->succ; free(p); } return c; }
typedef struct libro { char titolo[20]; char autore[40]; ... struct libro *prec; // puntatore all'elemento precedente } libro_t; // definizione di due variabili globali libro_t *sp = NULL; // stack pointer libro_t *bp = NULL; // base pointer
void push(char *titolo, ...) { libro_t *n = (libro_t *) malloc(sizeof(libro_t)); strcpy(n->titolo, titolo); ... n->prec = NULL; if ((bp == NULL) && (sp == NULL)) { // lo stack è vuoto bp = n; sp = n; } else { // lo stack non è vuoto n->prec = sp; sp = n; } }
libro_t *pop() { libro_t *ret = NULL; if ((bp != NULL) && (sp != NULL)) { if (bp == sp) { ret = sp; // stack rimane vuoto sp = NULL; bp = NULL; } else { ret = sp; // lo stack non rimane vuoto sp = sp->prec } } return ret; }