In coda, quale fine è la "testa"?


18

Avevo sempre pensato che la "testa" di una coda fosse l'elemento successivo da leggere, e non avevo mai messo in dubbio quell'uso. Quindi una libreria di liste collegate che ho scritto, che viene utilizzata per mantenere le code, codifica quella terminologia: abbiamo una list1_headmacro che recupera il primo elemento; quando si utilizza questa libreria in una coda, questo sarà il primo elemento da rimuovere.

Ma un nuovo sviluppatore del team era abituato ad avere le code implementate al contrario. Ha descritto una coda che si comporta come un cane: si inserisce in testa e si rimuove in coda. Questa è una descrizione abbastanza intelligente che ritengo che il suo utilizzo debba essere più diffuso e non ho una descrizione altrettanto evocativa del mio utilizzo preferito.

Quindi, immagino, ci sono due domande correlate: 1, cosa significa per te la "testa" di una coda? e 2, perché usiamo la parola "testa" per descrivere quel concetto?


1
"Ha descritto una coda che si comporta come un cane" ... Sembra un ragazzo divertente con cui lavorare - Non lasciarlo vicino a un cliente.
NoChance,

1
Non lo so, ma avrei indovinato la tua implementazione, non quella del cane.
Izkata,

Un'altra buona spiegazione della differenza tra QUEUE e STACK: http://pages.cs.wisc.edu/~mcw/cs367/lectures/stacks.html
Ythalo Rossy,

Inoltre, nei libri di testo, l'elenco (singolarmente) collegato viene spesso introdotto prima di altre strutture di dati come stack e code, e quindi queste sono costruite sopra la struttura dell'elenco collegato (che non è necessariamente il modo preferito per costruire queste strutture di dati oggi perché di cache cache). Un elenco collegato avrà spesso un puntatore head (si riferisce al primo elemento) e un puntatore di coda (fino all'ultimo); in questa disposizione, è facile inserire all'estremità della coda rimuovere dalla testa, quindi, in una tale coda FIFO, si rimuove dalla parte anteriore. Ma nota che questo è davvero un dettaglio di implementazione interno.
Filip Milovanović,

A proposito, penso che sia parzialmente una cosa legata al linguaggio, ma riguarda anche il modo in cui concettualizziamo ciò che fa una coda. Per la maggior parte delle persone che conoscono il significato della parola "coda", o vengono introdotti al concetto con quella metafora (in attesa in linea), la parte di uscita è in primo piano; Sospetto che il tuo amico lo concettualizzi più come una specie di pipeline, in cui spingi gli oggetti a un'estremità (l'inizio, o in un certo senso, la "testa") della pipa, e escono dall'altra estremità.
Filip Milovanović,

Risposte:


29

Si entra nella parte posteriore della coda e si esce dalla parte anteriore. Nella maggior parte delle società, ciò implicherebbe che la testa è la parte anteriore e gli oggetti vengono rimossi dalla testa.

Il Javadoc per la coda sembra essere d'accordo con la definizione classica (cioè il vostro originale):

Qualunque sia l'ordinamento utilizzato, il capo della coda è quell'elemento che verrebbe rimosso da una chiamata a remove () o poll (). In una coda FIFO, tutti i nuovi elementi vengono inseriti nella coda della coda.


4
Anche il C ++ STL è d'accordo.
Fabio Ceconello,

Anche la terminologia comune per FIFO / LIFO è rimuovere dalla parte superiore della coda / pila. La parte superiore del cane è la testa, non la coda. MrGreen
Spencer Kormos il

Sembra che tu abbia risposto alla prima domanda, è proprio il caso che l'uso che ho capito sia tradizionale ... Grazie per i riferimenti. Ma non è così rivestito di ferro perché la parte anteriore della coda si chiama "testa" ...
Aidan Cully

... quindi in quale orifizio del cane accodiamo gli oggetti? ;)
ell

1
La coda di un cane è il capo della coda.
Caleb,

8

Ciò che la gente negli Stati Uniti chiama comunemente una linea, come nella cosa in cui ti trovi all'ufficio postale, le persone in altri paesi di lingua inglese chiamano una coda. Quindi, è più facile per gli americani mantenere la terminologia corretta se si sostituisce "linea" a "coda". In altre parole, quando sei nella testa o nella parte anteriore della linea, sei il prossimo ad essere chiamato.


Forse questa è più una domanda sull'inglese, quindi, perché il problema che sembra essere emerso è "perché chiamiamo il fronte la testa?"
Aidan Cully,

3
@AidanCully: perché la testa di un corpo è (in quadrupedi e altri animali orientati orizzontalmente) in avanti, o davanti.
uscita

Questa è la migliore spiegazione possibile per noi americani.
Dev

4

Entrambe le convenzioni sono di uso comune. Nella mia esperienza, quando si parla di code in generale, l'elemento head è il prossimo ad uscire dalla coda, e la coda è dove gli elementi entrano nella coda. Ciò è coerente con l'uso quotidiano dell'inglese: ci mettiamo in fila sul retro e il prossimo da servire è nella parte anteriore, o in testa. (E se tagli, è sul retro della linea per te!)

Tuttavia, quando una coda (nota anche come FIFO) viene implementata come buffer ad anello , i termini vengono in genere invertiti, poiché la porzione utilizzata del buffer ad anello assomiglia a un serpente che gira in un cerchio. Supponendo che il serpente si sta muovendo in avanti, la testa è naturalmente la fine che guida il movimento, che è anche la fine in cui vengono inseriti gli oggetti in arrivo.


Vale la pena menzionare i buffer circolari nel kernel Linux , che usano la convenzione che gli elementi vengono aggiunti in testa e rimossi in coda.
Craig McQueen,
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.