Почему BSD queue.h LIST называется списком?

Мой "родной язык" - Java, и мне нужно написать проект на C в образовательных целях. Я пытаюсь понять queue.h библиотека. В Java по умолчанию вы add() предмет до конца ListОднако в queue.hесть только LIST_INSERT_HEAD макрос, который не принимает других участников. На самом деле небольшой тест показывает, что он вставляется в HEAD (при перемещении с LIST_FOREACH он идет от последнего вставленного элемента к первому). Итак, разве это не должно называться очередью FILO (что означает стек)?

3 ответа

Решение

Список в Java соответствует списку ADT: "упорядоченная последовательность значений, где одно и то же значение может встречаться более одного раза".

LIST в queue.h также является списком ADT, в котором вы можете увидеть детали реализации (он реализован в виде двусвязного списка). Это LIFO, как говорится в самом файле queue.h (хотя и довольно мрачно). И да, один из способов реализации ADT в стеке - использование связанного списка.

Вы должны были пропустить других, должен присутствовать INSERT_TAIL. Пожалуйста, найдите и подтвердите это.

Он имеет как функциональные возможности, список и очередь:)

Может быть ниже, это не тот, который вы ищете, в любом случае http://bxr.su/o/queue.h

Есть несколько вариантов очереди, предоставляемых queue.h,

Так как все это делается препроцессором, а также обратите внимание, что полный путь к файлуsrc/sys/sys/queue.hв каждой системе BSD, что означает, что она интенсивно используется в ядре для внутренних структур, каждый вариант высоко оптимизирован для эффективности и минимального использования памяти.

Похоже, что в OpenBSD есть несколько вариантов выбора очередей (каждая BSD-система может иметь немного другой выбор):

* По какой-либо причине кажется, что в настоящее время только 4 из 6 вариантов официально зарегистрированы на странице руководства.Смотрите: http://bxr.su/o/share/man/man3/queue.3

Если вы хотите быть в состоянииINSERT_TAILв очередь / список, у вас все еще есть много вариантов для выбора здесь -SIMPLEQ, XSIMPLEQ, TAILQа также CIRCLEQ,

Итак, взаключение: нет закона, который говорит, что реализация очереди / списка по имениLISTдолжен разрешить вставку хвоста!

Другие вопросы по тегам