Algoritmi e strutture dati

Pile e code (strutture dati)

Una pila (o stack) è una sequenza di elementi di un certo tipo, in cui è possibile aggiungere o togliere elementi soltanto ad un estremo (la testa della sequenza). Una pila essere quindi vista come un caso speciale lista in cui l’ ultimo elemento è anche il primo ad essere rimosso e non è possibile accedere ad alcun elemento che non sia quello in testa. Tale meccanismo è detto LIFO, dall’ inglese “Last In First Out” , ovvero l ‘ultimo entrato è il primo ad uscire. Per esempio un tubetto di pastiglie ha un meccanismo di acceso LIFO, l’ultima inserita è la prima ad uscire.
Una coda è una sequenza di elementi di un certo tipo, in cui è possibile aggiungere elementi ad un estremo e toglierne dall’ estremo opposto. Una coda può essere quindi vista come una particolare lista in cui è possibile aggiungere elementi ad un estremo (il fondo) e togliere elementi dall’ altro estremo (in testa). Tale meccanismo è detto FIFO dall’ inglese “First In First Out”, ovvero il primo arrivato è il primo ad uscire. Per esempio una fila di persone ad uno sportello postale è gestita con la disciplina FIFO, il primo arrivato è il primo ad essere servito.

L’ insieme degli operatori tipici di una pila sono:

La specifica sintattica di questi operatori è la seguente:

Indichiamo con il termine ai gli elementi di una pila P, elementi di lunghezza arbitraria e di tipo tipoelem e sia b un booleano. Allora la specifica semantica della pila, sarà data dalle seguenti funzioni, con relative precondizioni e postcondizioni:

L’ insieme degli operatori tipici di una coda sono CREACODA, CODAVUOTA, LEGGICODA, FUORICODA E INCODA. Questi operatori hanno tutti le stesse specifiche sintattiche dei corrispettivi operatori per la pila. Per quanto riguarda le specifiche semantiche l’ unica differenza sta nell’ operatore INCODA. Indicando con Q una generica coda:

Poiché pile e code sono casi particolari di liste, ogni realizzazione scritta per le liste funziona anche per le pile e per le code:

Per saperne di più consulta i seguenti approfondimenti:























































Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.