队列操作/API 的术语/命名规则是什么?

7
“队列”或FIFO是最常见的数据结构之一,在许多语言和框架中都有本地实现。然而,关于基本队列操作应如何命名似乎没有太多共识。几种流行语言的调查结果如下:
  • Python: put / get
  • C#, Qt : enqueue /dequeue
  • Ruby, C++ STD: push / pop
  • Java: add / remove
如果需要实现一个队列(比如在某些嵌入式平台上,该平台没有本地队列实现),哪种命名约定最好呢?Enqueue/dequeue似乎最明确,但过于冗长;put/get简洁,但不提供任何关于FIFO操作的提示;push/pop似乎暗示堆栈操作而不是队列操作。
8个回答

5

我有点龟毛,所以我会选择使用enqueue/dequeue

尽管add/next也很吸引人。

为了更加混淆问题,在Perl中是push/shift。 :)


为什么不直接加上bish()和bosh()呢?TAOCP可能是争议解决的参考文献? - Aiden Bell
1
我认为流行的选择是 enqueue(element: Element) : voiddequeue() : Element。然而,我倾向于尽可能多地使用像 add(element: Element)next() : Element 这样的数据结构/算法类,因为这些方法也被其他数据结构/算法共享。这样,实现者就不需要了解 DS 的内部情况,更容易实现 SOLID 中的 Liskov 替换原则。否则,你只需要一个适配器,但我支持改变这种规范惯例。 - Cody

2

对于一个先进先出的队列,使用push/pop 是完全错误的,因为这些操作是栈(后进先出)操作。

队列既可以指对象,也可以指操作,因此有点重载,而且 dequeue 可能会引起混淆,因为它常用于指双端队列。

put/get 简短、明显且通用(不假设实现方式,并适用于各种队列/列表/集合)- 这有什么不好的呢?


1
+1 我同意这个观点。push/pop 几乎总是与栈相关,而不是 FIFO。 - Andy White
“get” 惯例上不会修改集合,所以在我看来它等同于 “peek”。 - Grault

1

我可能会将它命名为push_backpop_front


0

“Pop / push”听起来不太对,因为它暗示了一个栈数据结构而不是队列。

为了添加一些新的建议:我的老师们总是在黑板上使用“in”和“out”。


0

我喜欢 entail 和 behead。虽然不是每个人都喜欢。或者说“新进去,旧出来”。对于我们西南部的人来说,还有 berattle 和 defang。但我最喜欢的是 graphical。向右箭头表示进入,然后向右箭头表示退出。


0

我喜欢使用enqueue和dequeue,但是打字很麻烦。因此在我的队列结构(包括C++和Java)中,我将这些函数命名为enQ和deQ :)


0

添加/删除听起来是最合乎逻辑的选择,特别是如果你打算让不熟悉结构或语言的人阅读(更容易理解)。

推入/弹出在我的排名中紧随其后,因为这是我个人的偏好。

放置/获取排在其后。

入队/出队最后一位,因为我真的很讨厌字母 Q。


我只是不想一直打Enqueueueue。 - Aiden Bell

0

添加/删除具有优势,您可以轻松地从队列更改为另一种数据结构。

例如,在队列和堆栈中存储状态会导致广度优先搜索和深度优先搜索之间的差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接