2009-05-29 14 views
6

Die "Warteschlange" oder FIFO ist eine der häufigsten Datenstrukturen und hat native Implementierungen in vielen Sprachen und Frameworks. Es scheint jedoch wenig Konsens darüber zu bestehen, wie grundlegende Warteschlangenoperationen benannt werden sollten. Eine Umfrage von mehreren populären Sprachen zeigen:Terminologie/Namenskonvention für Warteschlangenoperationen/APIs?

  • Python: put/get
  • C#, Qt: enqueue/dequeue
  • Rubin, C++ STD: push/pop
  • Java: Hinzufügen/Entfernen

Wenn eine Warteschlange implementiert werden muss (z. B. in einer eingebetteten Plattform, die noch keine native Warteschlangenimplementierung hat), welche Namenskonvention wäre am besten? Enqueue/Dequeue scheint am deutlichsten zu sein, ist aber wortreich; put/get ist knapp, gibt jedoch keinen Hinweis auf den FIFO-Charakter der Operationen; Push/Pop scheint Stapeloperationen anstelle von Warteschlangenoperationen zu empfehlen.

Antwort

4

hasse ich bin ein bisschen ein Pedant, so würde ich mit enqueue/dequeue gehen.

Obwohl add/next eine gewisse Anziehungskraft hat.

Nur um das Problem ein wenig mehr zu verwischen, in Perl ist es push/shift. :)

+0

Warum nicht einfach auch bish() bosh(): S TAOCP vielleicht die Referenz für die Streitbeilegung? –

+1

Ich glaube, die beliebte Wahl ist 'enqueue (Element: Element): void' und' dequeue(): Element'. Allerdings tendiere ich dazu, so viele DS/Algorithm-Klassen wie möglich mit Dingen wie 'add (Element: Element)' und 'next(): Element' zu schreiben, da diese Methoden auch von anderen DS/Algorithmen gemeinsam genutzt werden. ** Auf diese Weise muss ein Implementer weniger über die Interna des DS Bescheid wissen und Sie können das Loskov Substitutionsprinzip von SOLID leichter anwenden **. Ansonsten brauchst du nur einen Adapter, aber ich bin dafür, die normative Konvention dafür zu ändern. – Cody

1

Ich werde es wahrscheinlich als push_back und pop_front nennen.

+0

+1 Oder oben/unten. Näher an Speicher Terminologie –

0

Hinzufügen/Entfernen klingt wie der logischste zu verwenden, besonders wenn Sie beabsichtigen, dass es möglicherweise von einer Person gelesen wird, die mit der Struktur oder der Sprache nicht vertraut ist (leichter zu verstehen).

Push/Pop würde als nächstes in meinen Rankings wegen persönlicher Vorlieben sein.

Put/Get kommt als nächstes.

Enqueue/Dequeue ist allerletzten, weil ich wirklich den Brief Q.

+0

Ich möchte einfach nicht ständig Enqueueeule schreiben. –

2

push/pop ist einfach falsch für einen fifo wie diese stack (first in last out) operationen sind.

Warteschlange kann sich sowohl auf das Objekt als auch auf eine Operation beziehen, so dass ein wenig überlastet ist und aus der Warteschlange entfernt werden kann, da dies häufig verwendet wird, um auf eine doppelendige Warteschlange zu verweisen.

put/get - kurz, offensichtlich und generisch (geht nicht von einer Implementierung aus und kann für alle Arten von Warteschlangen/Listen/Sammlungen verwendet werden) - was ist nicht zu mögen?

+1

+1 Ich stimme dem zu. Push/Pop ist fast immer mit einem Stack verbunden, nicht ein Fifo –

+0

"Get" konventionell ändert keine Sammlung, so scheint es mir "peek" zu mir. – Grault

0

Hinzufügen/Entfernen hat den Vorteil, dass Sie problemlos von einer Warteschlange in eine andere Datenstruktur wechseln können.

Zum Beispiel macht das Speichern von Zuständen in einer Warteschlange im Vergleich zu einem Stapel den Unterschied zwischen der ersten und der tiefsten Suche.

0

Ich mag Enqueue und Dequeue, aber sie zu tippen saugt. In meinen Queue-Strukturen (sowohl C++ als auch Java) nannte ich die Funktionen enQ und deQ :)

0

Pop/Push klingt falsch, da es eine Stack-Datenstruktur anstelle einer Queue vorschlägt.

Um etwas zu den Vorschlägen hinzuzufügen: meine Lehrer verwendeten immer in und out an der Tafel.

0

Ich mag führen und enthaupten. Nicht für jeden. Oder "mit dem Neuen", "mit dem Alten". Und dann für uns Südwestler gibt es Rat und Defang. Aber mein Favorit ist grafisch. Rechter Pfeil für in und dann rechter Pfeil für out.

Verwandte Themen