Per provare a semplificare eccessivamente la descrizione di uno stack e di una coda, sono entrambe catene dinamiche di elementi informativi a cui è possibile accedere da un'estremità della catena e l'unica vera differenza tra loro è il fatto che:
quando si lavora con una pila
- si inseriscono elementi a un'estremità della catena e
- recuperi e / o rimuovi elementi dalla stessa estremità della catena
mentre con una coda
- si inseriscono elementi a un'estremità della catena e
- li recuperi / rimuovi dall'altra estremità
NOTA : sto usando la formulazione astratta di recuperare / rimuovere in questo contesto perché ci sono casi in cui si recupera semplicemente l'elemento dalla catena o in un certo senso lo si legge o si accede al suo valore, ma ci sono anche casi in cui si rimuove l'elemento da la catena e infine ci sono casi in cui si eseguono entrambe le azioni con la stessa chiamata.
Inoltre l'elemento parola viene usato di proposito per astrarre il più possibile la catena immaginaria e separarla da termini specifici del linguaggio di programmazione. Questa entità informativa astratta chiamata element potrebbe essere qualsiasi cosa, da un puntatore, un valore, una stringa o caratteri, un oggetto, ... a seconda della lingua.
Nella maggior parte dei casi, sebbene sia effettivamente un valore o una posizione di memoria (ovvero un puntatore). E il resto nasconde questo fatto dietro il gergo linguistico <
Una coda può essere utile quando l'ordine degli elementi è importante e deve essere esattamente lo stesso di quando gli elementi sono entrati per la prima volta nel tuo programma. Ad esempio quando si elabora un flusso audio o quando si esegue il buffer dei dati di rete. O quando si esegue qualsiasi tipo di negozio e l'elaborazione in avanti. In tutti questi casi è necessario che la sequenza degli elementi sia emessa nello stesso ordine in cui sono entrati nel programma, altrimenti le informazioni potrebbero smettere di avere senso. Pertanto, è possibile interrompere il programma in una parte che legge i dati da alcuni input, esegue alcune elaborazioni e li scrive in una coda e una parte che recupera i dati dalla coda li elabora e li memorizza in un'altra coda per ulteriori elaborazioni o trasmissione dei dati .
Uno stack può essere utile quando è necessario memorizzare temporaneamente un elemento che verrà utilizzato nelle fasi immediate del programma. Ad esempio, i linguaggi di programmazione di solito usano una struttura di stack per passare variabili alle funzioni. Quello che effettivamente fanno è archiviare (o spingere) gli argomenti della funzione nello stack e quindi saltare alla funzione in cui rimuovono e recuperano (o pop) lo stesso numero di elementi dallo stack. In questo modo la dimensione dello stack dipende dal numero di chiamate nidificate di funzioni. Inoltre, dopo che una funzione è stata chiamata e ha terminato ciò che stava facendo, lascia lo stack esattamente nelle stesse condizioni di prima che fosse chiamato! In questo modo qualsiasi funzione può operare con lo stack ignorando come le altre funzioni operano con essa.
Infine, dovresti sapere che ci sono altri termini usati là fuori per lo stesso di concetti simili. Ad esempio uno stack potrebbe essere chiamato un heap. Esistono anche versioni ibride di questi concetti, ad esempio una coda a doppia estremità può comportarsi contemporaneamente come uno stack e come una coda, poiché è possibile accedervi da entrambe le estremità contemporaneamente. Inoltre, il fatto che una struttura di dati sia fornita come uno stack o come una coda non significa necessariamente che sia implementata come tale, ci sono casi in cui una struttura di dati può essere implementata come qualsiasi cosa e essere fornita come specifica struttura dei dati semplicemente perché può essere fatto per comportarsi come tale. In altre parole, se fornisci un metodo push and pop a qualsiasi struttura di dati, diventano magicamente stack!