Qual è la differenza di base tra stack e coda?


130

Qual è la differenza di base tra stack e coda ??

Aiutatemi, non riesco a trovare la differenza.

Come si differenzia uno stack e una coda?

Ho cercato la risposta in vari link e ho trovato questa risposta ..

Nella programmazione di alto livello,

una pila è definita come un elenco o una sequenza di elementi che viene allungata posizionando i nuovi elementi "in cima" agli elementi esistenti e accorciati rimuovendo gli elementi dalla cima degli elementi esistenti. È un ADT [Abstract Data Type] con operazioni matematiche di "push" e "pop".

Una coda è una sequenza di elementi a cui si aggiunge posizionando il nuovo elemento sul retro di quello esistente e abbreviato rimuovendo gli elementi davanti alla coda. È un ADT [tipo di dati astratto]. C'è di più a questi termini compresi nella programmazione di Java, C ++, Python e così via.

Posso avere una risposta più dettagliata? Mi aiuti per favore.


12
Sembra che tu abbia risposto alla tua domanda: uno stack è un contenitore First-In First-Out (LIFO) e una coda è un contenitore First-In First-Out (FIFO).
Iridium,

Risposte:


151

Stack è una struttura dati LIFO (last in first out). Il link associato a Wikipedia contiene una descrizione dettagliata ed esempi.

La coda è una struttura di dati FIFO (first in first out). Il link associato a Wikipedia contiene una descrizione dettagliata ed esempi.


131

Immagina una risma di carta . L'ultimo pezzo messo in pila è in cima, quindi è il primo ad uscire. Questo è LIFO . L'aggiunta di un pezzo di carta si chiama "spingendo", e la rimozione di un pezzo di carta si chiama "scoppiare".

Immagina una fila al negozio . La prima persona in linea è la prima persona a uscire dalla linea. Questo è FIFO . Una persona che si mette in fila viene "accodata", e una persona che si mette in coda viene "accodata".


3
Una delle migliori analogie a cui riesco a pensare.
Yeikel,

83

Un modello visivo

Pancake Stack (LIFO)

L'unico modo per aggiungerne uno e / o rimuoverne uno è dall'alto.

pila di pancake

Coda di linea (FIFO)

Quando si arriva, arrivano alla fine della coda e quando si lascia, partono dalla parte anteriore della coda.

linea dmv

Curiosità: gli inglesi si riferiscono a file di persone come una coda


6
Caspita, questa deve essere la risposta imo. Grazie @Jacksonkr
Kulasangar il

Haha, certo, questa è una descrizione perfetta di Queue e Stack, ma solo per amor di argomenti, e se volessi aggiungere il primo pancake al piatto? So che questo può essere completato con uno stack.size () vs. if (! Stack.isEmpty ()), ma comunque quel primo pancake potrebbe essere il migliore:) ... Ad ogni modo, bella risposta e sono d'accordo che sia il più chiaro ... sembra interessante che gli inglesi si riferiscano alle linee come Code (se questo è accurato), in un linguaggio non di programmazione considererei comunque che una riga in cui la prima voce deve uscire per prima (dopo essere uscita dalla riga / coda )
ViaTech,

Aspetta, non si chiamano code altrove?
gita

37

Puoi pensare a entrambi come a un elenco ordinato di cose (ordinate dal momento in cui sono state aggiunte all'elenco). La differenza principale tra i due è il modo in cui i nuovi elementi entrano nell'elenco e quelli vecchi escono dall'elenco.

Per uno stack, se ho un elenco a, b, ce lo aggiungo d, viene virato alla fine, quindi finisco con a,b,c,d. Se voglio far apparire un elemento dell'elenco, rimuovo l'ultimo elemento che ho aggiunto, che è d. Dopo un pop, la mia lista è di a,b,cnuovo ora

Per una coda, aggiungo nuovi elementi allo stesso modo. a,b,cdiventa a,b,c,ddopo l'aggiunta d. Ma, ora che faccio pop, devo prendere un elemento dalla prima lista, così diventa b,c,d.

È molto semplice!


14

Coda

La coda è una raccolta ordinata di articoli.

Gli elementi vengono eliminati a un'estremità denominata "front" della coda.

Gli elementi vengono inseriti all'altro capo chiamato "retro" della coda.

Il primo elemento inserito è il primo da rimuovere (FIFO).

Pila

Stack è una raccolta di oggetti.

Consente l'accesso a un solo elemento dati: l'ultimo elemento inserito.

Gli elementi vengono inseriti ed eliminati a un'estremità denominata "In cima alla pila".

È un oggetto dinamico e in continua evoluzione.

Tutti gli elementi di dati vengono messi in cima allo stack e rimossi in cima

Questa struttura di accesso è nota come struttura Last in First out (LIFO)


Quindi in pratica una "coda" è un "FIFO", primo in coda. Mentre uno "stack" è un "LIFO", ultimo nella prima coda di uscita. Ho ragione?
Sebastian Nielsen,

@SebastianNielsen Sì, corretto, come menzionato nella risposta.
Dissanayake,

Ma qual è la differenza tra un elenco collegato e uno stack? Non è lo stesso?
Sebastian Nielsen,

@SebastianNielsen Lo stack è un ADT, il che significa che espone un'interfaccia, che è l'operazione push e pop, ma il meccanismo sottostante (implementazione) è nascosto all'utente finale. Uno stack può essere implementato con un array o con un elenco collegato.
gdyrrahitis,

13

PILA:

  1. Lo stack è definito come un elenco di elementi in cui è possibile inserire o eliminare elementi solo nella parte superiore dello stack.
  2. Il comportamento di uno stack è come un sistema LIFO (Last-In First-Out).
  3. Lo stack viene utilizzato per passare i parametri tra le funzioni. Durante una chiamata a una funzione, i parametri e le variabili locali vengono memorizzati in uno stack.
  4. Linguaggi di programmazione di alto livello come Pascal, C, ecc. Che forniscono supporto per la ricorsione utilizzano la pila per la contabilità. Ricordare in ogni chiamata ricorsiva, è necessario salvare il valore corrente di parametri, variabili locali e l'indirizzo di ritorno (l'indirizzo al quale il controllo deve ritornare dopo la chiamata).

CODA:

  1. La coda è una raccolta dello stesso tipo di elemento. È un elenco lineare in cui gli inserimenti possono aver luogo a un'estremità dell'elenco, chiamato retro dell'elenco, e le eliminazioni possono avvenire solo all'altra estremità, chiamato fronte dell'elenco
  2. Il comportamento di una coda è come un sistema FIFO (First-In-First-Out).

Sono abbastanza sicuro che puoi inserire anche alla fine o all'inizio di uno stack, penso che la cosa importante da notare qui sia FIFO vs. LIFO
Mike

6

Una pila è una raccolta di elementi, che possono essere archiviati e recuperati uno alla volta. Gli elementi vengono recuperati in ordine inverso rispetto al tempo di archiviazione, ovvero l'ultimo elemento archiviato è l'elemento successivo da recuperare. Una pila viene talvolta definita struttura Last-In-First-Out (LIFO) o First-In-Last-Out (FILO). Gli elementi precedentemente memorizzati non possono essere recuperati fino a quando non è stato recuperato l'ultimo elemento (di solito indicato come "top").

Una coda è una raccolta di elementi, che possono essere archiviati e recuperati uno alla volta. Gli elementi vengono recuperati in ordine di tempo di memorizzazione, ovvero il primo elemento memorizzato è l'elemento successivo da recuperare. Una coda viene talvolta definita struttura First-In-First-Out (FIFO) o Last-In-Last-Out (LILO). Gli elementi successivamente memorizzati non possono essere recuperati fino a quando non viene recuperato il primo elemento (di solito denominato elemento "frontale").


2

STACK: Stack è definito come un elenco di elementi in cui è possibile inserire o eliminare elementi solo nella parte superiore dello stack

Lo stack viene utilizzato per passare i parametri tra le funzioni. Durante una chiamata a una funzione, i parametri e le variabili locali vengono memorizzati in uno stack.

Una pila è una raccolta di elementi, che possono essere archiviati e recuperati uno alla volta. Gli elementi vengono recuperati in ordine inverso rispetto al tempo di archiviazione, ovvero l'ultimo elemento archiviato è l'elemento successivo da recuperare. Una pila viene talvolta definita struttura Last-In-First-Out (LIFO) o First-In-Last-Out (FILO). Gli elementi precedentemente memorizzati non possono essere recuperati fino a quando non è stato recuperato l'ultimo elemento (di solito indicato come "top").

CODA:

La coda è una raccolta dello stesso tipo di elemento. È un elenco lineare in cui gli inserimenti possono aver luogo a un'estremità dell'elenco, chiamato retro dell'elenco, e le eliminazioni possono avvenire solo all'altra estremità, chiamato fronte dell'elenco

Una coda è una raccolta di elementi, che possono essere archiviati e recuperati uno alla volta. Gli elementi vengono recuperati in ordine di tempo di memorizzazione, ovvero il primo elemento memorizzato è l'elemento successivo da recuperare. Una coda viene talvolta definita struttura First-In-First-Out (FIFO) o Last-In-Last-Out (LILO). Gli elementi successivamente memorizzati non possono essere recuperati fino a quando non viene recuperato il primo elemento (di solito denominato elemento "frontale").


2

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!


Non utilizzare la formattazione del codice per il testo che non è codice.
Marchese di Lorne,

1

STACK è un elenco LIFO (last in, first out). significa che si devono inserire 3 elementi nello stack, ovvero 10,20,30. 10 viene inserito per primo e 30 viene inserito per ultimo, quindi 30 viene eliminato per primo dallo stack e 10 viene eliminato per ultimo dallo stack.questo è un elenco LIFO (Last In First Out).

QUEUE è la lista FIFO (First In First Out). Significa che viene inserito per primo un elemento che deve essere eliminato first.eg coda di persone.


1

Impila una raccolta considerata considerata verticale. Per prima cosa capire che una collezione è un OGGETTO che raccoglie e organizza altri OGGETTI più piccoli. Questi OGGETTI più piccoli sono comunemente chiamati Elementi. Questi elementi vengono "spinti" nello stack in un ordine ABC in cui A è il primo e C è l'ultimo. verticalmente sarebbe simile al seguente: 3 ° elemento aggiunto) C 2 ° elemento aggiunto) B 1 ° elemento aggiunto) A

Si noti che la "A" che è stata aggiunta per la prima volta alla pila è in fondo. Se vuoi rimuovere la "A" dallo stack devi prima rimuovere "C", quindi "B" e infine l'elemento target "A". Lo stack richiede un approccio LIFO mentre si occupa delle complessità di uno stack. (Last In First Out) Quando si rimuove un elemento da uno stack, viene visualizzata la sintassi corretta. non rimuoviamo un elemento da uno stack, ma lo "pop".

Ricordiamo che "A" è stato il primo elemento inserito nello stack e che "C" è stato l'ultimo elemento inserito nello stack. Se decidi che ti piacerebbe vedere cosa c'è in fondo alla pila, essendo i 3 elementi sono nella pila ordinata A essendo il primo B essendo il secondo e C essendo il terzo elemento, la parte superiore dovrebbe essere spuntata poi il aggiunto il secondo elemento per visualizzare il fondo della pila.


Si prega di formattare la domanda per renderla migliore e più leggibile.
Neeku,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.