 
                            Un ottimo esempio di strutture dati dinamiche è una semplice libreria per lo stack, una che usi una lista dinamica e che includa funzioni per inizializzare, pulire, inserire ed estrarre.
Il file di intestazione della libreria potrebbe essere questo:
/* Stack Library – Questa libreria contiene le funzioni base per gestire le operazioni su di uno stack di interi (facilmente estendibile) */ typedef int stack_data; extern void stack_init(); /* Inizializza la libreria Chiamare questa funzione prima di chiamare qualsiasi altra funzione. */ extern void stack_clear(); /* Elimina tutti i dati inseriti */ extern int stack_empty(); /* Restituisce 1 se lo stack è vuoto, 0 altrimenti. */ extern void stack_push(stack_data d); /* Inserisce il valore d nello stack */ extern stack_data stack_pop(); /* Restituisce l'elemento al top dello stack estraendolo e rimuovendolo dallo stack. Ritorna un valore non valido se lo stack è vuoto. */
Il codice della libreria è il seguente:
#include "stack.h"
#include <stdio.h>
/* Stack Library - This library offers the
   minimal stack operations for a stack of integers */
struct stack_rec
{
    stack_data data;
    struct stack_rec *next;
};
struct stack_rec *top=NULL;
void stack_init()
/* Inizializza la libreria */
{
    top=NULL;
}
void stack_clear()
/*  Elimina tutti i dati inseriti */
{
    stack_data x;
    while (!stack_empty())
    x=stack_pop();
}
int stack_empty()
/* Restituisce 1 se lo stack è vuoto, 0 altrimenti. */
{
    if (top==NULL)
        return(1);
    else
        return(0);
}
void stack_push(stack_data d)
/* Inserisce il valore d nello stack */
{
    struct stack_rec *temp;
    temp=
  (struct stack_rec *)malloc(sizeof(struct stack_rec));
    temp->data=d;
    temp->next=top;
    top=temp;
}
stack_data stack_pop()
/*Restituisce l'elemento al top dello stack estraendolo e rimuovendolo dallo stack.
   Ritorna un valore non valido se lo stack è vuoto. */
{
    struct stack_rec *temp;
    stack_data d=0;
    if (top!=NULL)
    {
        d=top->data;
        temp=top;
        top=top->next;
        free(temp);
    }
    return(d);
}
Da notare che questa libreria realizza information hiding. Chi può avere accesso al solo file intestazione non può dire nulla di come lo stack è stato implementato. Si usano array? Si usano puntatori? Si usano files? Non è possibile dirlo.
Da notare che in C si può usare NULL. NULL è definito nella libreria stdio.h, pertanto ricordarsi di includere stdio.h quando si usano i puntatori. NULL è la stessa cosa di zero.
Approfondimenti ed esercizi
Aggiungere le funzioni dup count e add alla libreria dello stack per duplicare l'elemento di testa, restituire il numero di elementi dello stack e per aggiungere due elementi al top dello stack
Scrivere un programma che utilizzi la libreria di cui sopra, utilizzando un makefile (da scrivere anch'esso)
Errori in linguaggio C da evitare
•	dimenticare le parentesi prima di referenziare un record.
•	Dimenticare di liberare la memoria. Non è sufficiente scrivere top=NULL nella libreria dello stack, perchè questa azione crea blocchi “orfani” che necessitano di essere liberati
•	Dimenticare di includere stdio.h quando si usano i puntatori e si utilizza NULL.
 
								
    		
    		    		
    		
    		
    		    		
    					
							





