Терминология/соглашение об именах для операций с очередями/API?

«Очередь», или FIFO, является одной из наиболее распространенных структур данных и имеет собственные реализации на многих языках и платформах. Однако, по-видимому, нет единого мнения относительно того, как должны называться основные операции с очередями. Обзор нескольких популярных языков показывает:

  • Python: поставить/получить
  • C#, Qt: поставить в очередь/удалить из очереди
  • Ruby, C++ STD: push/pop
  • Ява: добавить/удалить

Если нужно реализовать очередь (скажем, на какой-то встроенной платформе, которая еще не имеет собственной реализации очереди), какое соглашение об именах было бы лучшим? Enqueue/dequeue кажется наиболее явным, но многословным; put/get является кратким, но не дает никакого намека на характер операций FIFO; push/pop, кажется, предлагает операции со стеком вместо операций с очередью.


person SytS    schedule 29.05.2009    source источник


Ответы (8)


Я немного педант, поэтому я бы выбрал enqueue/dequeue.

Хотя add/next имеет определенную привлекательность.

Чтобы еще больше затуманить проблему, в Perl это push/shift. :)

person chaos    schedule 29.05.2009
comment
Почему бы просто не использовать bish() и bosh() :S TAOCP, может быть, ссылка для разрешения споров? - person Aiden Bell; 29.05.2009
comment
Я считаю, что популярный выбор - enqueue(element: Element) : void и dequeue() : Element. Тем не менее, я стараюсь писать как можно больше классов DS/Algorithm, используя такие вещи, как add(element: Element) и next() : Element, потому что эти методы также являются общими для других DS/Algorithms. Таким образом, разработчику нужно меньше знать о внутреннем устройстве DS, и вы можете проще использовать принцип замещения Лискова из SOLID. В противном случае вам просто нужен переходник, но я полностью за изменение нормативного соглашения для этого. - person Cody; 07.03.2018

push/pop совершенно неверны для fifo, поскольку это операции стека (первым пришел последним).

очередь может ссылаться как на объект, так и на операцию, поэтому она немного перегружена, а удаление из очереди может вызвать путаницу, поскольку обычно используется для ссылки на двустороннюю очередь.

put/get - короткий, очевидный и общий (не предполагает реализации и может использоваться для всех видов очередей/списков/коллекций) - что не нравится?

person Dipstick    schedule 29.05.2009
comment
+1 Я согласен с этим. push/pop почти всегда ассоциируется со стеком, а не с fifo - person Andy White; 29.05.2009
comment
get обычно не изменяет коллекцию, поэтому мне кажется, что это эквивалентно просмотру. - person Grault; 15.08.2014

Я, вероятно, назову его как push_back и pop_front.

person Naveen    schedule 29.05.2009

Добавить/удалить звучит как наиболее логичный вариант, особенно если вы предполагаете, что его может прочитать человек, незнакомый со структурой или языком (его легче понять).

Push/Pop будет следующим в моем рейтинге из-за личных предпочтений.

Далее идет Put/Get.

Enqueue/Dequeue очень последний, потому что я действительно ненавижу букву Q.

person TheTXI    schedule 29.05.2009
comment
Я просто не хотел бы постоянно набирать Enqueueueue. - person Aiden Bell; 29.05.2009

Преимущество добавления/удаления состоит в том, что вы можете легко перейти от очереди к другой структуре данных.

Например, хранение состояний в очереди, а не в стеке, определяет разницу между поиском в ширину и поиском в глубину.

person starblue    schedule 29.05.2009

Мне нравятся enqueue и dequeue, но печатать их - отстой. Поэтому в своих структурах Queue (как на C++, так и на Java) я назвал функции enQ и deQ :)

person Community    schedule 18.09.2009

Pop/push звучит неправильно, поскольку предполагает структуру данных стека вместо очереди.

Чтобы добавить что-то новое к предложениям: мои учителя всегда использовали in и out на доске.

person Croo    schedule 28.11.2013

Мне нравится влечь и обезглавливать. Однако не для всех. Или «с новым», «со старым». А то для нас, жителей Юго-Запада, есть берэттл и дефанг. Но больше всего мне нравится графика. Стрелка вправо для входа, а затем стрелка вправо для выхода.

person user23713    schedule 24.07.2014