我的“母语”是 Java,出于教育目的,我需要用 C 编写一个项目。我试图了解queue.h
图书馆。在 Java 中,默认情况下您add()
将一个项目放在 . 的末尾List
,但是queue.h
只有LIST_INSERT_HEAD
一个不接受其他成员的宏。事实上,一个小测试表明它插入到 HEAD (当用LIST_FOREACH
它遍历时,从最后插入的元素到第一个元素)。那么,这不应该叫 FILO 队列(意思是堆栈)吗?
问问题
993 次
3 回答
1
于 2013-07-17T19:41:29.560 回答
0
提供了许多队列选项queue.h
。
由于这一切都是由预处理器完成的,并且还要注意文件的完整路径src/sys/sys/queue.h
在每个 BSD 系统上,这意味着它在内核中大量用于内部结构,每个变体都针对效率和最低内存进行了高度优化脚印。
在 OpenBSD 上,似乎有几个队列可供选择(每个 BSD 系统在此处可能有稍微不同的选择):
- http://bxr.su/o/queue.h#SLIST_HEAD
- http://bxr.su/o/queue.h#LIST_HEAD
- http://bxr.su/o/queue.h#SIMPLEQ_HEAD
- http://bxr.su/o/queue.h#XSIMPLEQ_HEAD *
- http://bxr.su/o/queue.h#TAILQ_HEAD
- http://bxr.su/o/queue.h#CIRCLEQ_HEAD *
* 无论出于何种原因,目前看来只有 6 个选项中的 4 个被正式记录在手册页中。见:http ://bxr.su/o/share/man/man3/queue.3
如果您希望能够INSERT_TAIL
进入队列/列表,您仍然有很多选项可供选择—— SIMPLEQ
、XSIMPLEQ
和。TAILQ
CIRCLEQ
因此,总而言之:没有法律规定名称的队列/列表实现LIST
必须允许尾部插入!
于 2015-10-01T09:51:16.477 回答