In coda, quale fine è la "testa"?

17

Avevo sempre pensato che la "testa" di una coda fosse il prossimo elemento da leggere, e non avevo mai messo in dubbio quell'uso. Quindi una libreria di liste collegate che ho scritto, che è usata per mantenere le code, ha codificato quella terminologia: abbiamo una macro list1_head 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 come comportarsi come un cane: si inserisce alla testa e si toglie alla 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?

    
posta Aidan Cully 14.04.2012 - 23:05
fonte

3 risposte

28

Entra nella parte posteriore della coda e parti di fronte. Nella maggior parte delle società, ciò implicherebbe che la testa sia davanti e che gli oggetti vengano rimossi dalla testa.

Il Javadoc per la coda sembra essere d'accordo con la definizione classica (es. quello originale):

Whatever the ordering used, the head of the queue is that element which would be removed by a call to remove() or poll(). In a FIFO queue, all new elements are inserted at the tail of the queue.

    
risposta data 14.04.2012 - 23:09
fonte
8

Ciò che le persone negli Stati Uniti chiamano 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" per "coda". In altre parole, quando sei in testa, o davanti, sulla linea, sei il prossimo ad essere chiamato.

    
risposta data 15.04.2012 - 01:32
fonte
3

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

Tuttavia, quando una coda (aka FIFO) è implementata come ring buffer , i termini sono tipicamente invertiti, perché la parte usata del buffer dell'anello assomiglia a un serpente che gira in circolo. Supponendo che il serpente si muova in avanti, la testa è naturalmente la fine che guida il movimento, che è anche la fine alla quale sono inseriti gli oggetti in entrata.

    
risposta data 01.06.2014 - 18:49
fonte

Leggi altre domande sui tag