为什么BSD queue.h LIST称为列表?

时间:2013-07-17 19:29:38

标签: c list data-structures queue bsd

我的“mothertongue”是Java,我需要在教育目的中用C编写一个项目。我试着理解queue.h库。在Java中,默认情况下,您add()会在List的末尾添加一个项目,但在queue.h中,只有LIST_INSERT_HEAD宏不接受其他成员。实际上,一个小测试表明它插入到HEAD中(当用LIST_FOREACH遍历时,它从最后插入的元素到第一个插入元素)。那么,这不应该被称为FILO队列(这意味着一个堆栈)吗?

3 个答案:

答案 0 :(得分:1)

你应该错过其他人,INSERT_TAIL必须在场。请发现并确认。

它具有功能,列表和队列:)

无论如何,可能是下面的,不是那个,你正在寻找 http://bxr.su/o/queue.h

答案 1 :(得分:1)

Java中的List对应于List ADT:"一个有序的值序列,其中相同的值可能出现多次"。

queue.h中的LIST也是一个List ADT,您可以在其中查看实现细节(它实现为双向链表)。它是LIFO,因为非常的queue.h文件声明(尽管非常模糊)。是的,实现Stack ADT的一种方法是using a linked list

答案 2 :(得分:0)

queue.h提供了许多队列选项。

由于这一切都是由预处理器完成的,并且还注意到每个BSD系统上文件的完整路径为src/sys/sys/queue.h,这意味着它在内核中大量使用内部结构,每个变体都针对效率和最小内存占用进行了高度优化。

在OpenBSD上,似乎有几个队列可供选择(每个BSD系统的选择可能略有不同):

*无论出于何种原因,目前似乎只有4个选项中的4个被正式记录在manual page中。 请参阅:http://bxr.su/o/share/man/man3/queue.3

如果您希望能够INSERT_TAIL进入队列/列表,那么您仍有很多选项可供选择 - SIMPLEQXSIMPLEQ,{{1 }和TAILQ

所以,在摘要中:没有法律规定名称CIRCLEQ的队列/列表实现必须允许尾部插入!