0

我的“母语”是 Java,出于教育目的,我需要用 C 编写一个项目。我试图了解queue.h图书馆。在 Java 中,默认情况下您add()将一个项目放在 . 的末尾List,但是queue.h只有LIST_INSERT_HEAD一个不接受其他成员的宏。事实上,一个小测试表明它插入到 HEAD (当用LIST_FOREACH它遍历时,从最后插入的元素到第一个元素)。那么,这不应该叫 FILO 队列(意思是堆栈)吗?

4

3 回答 3

1

你应该错过了其他人,INSERT_TAIL 必须在场。请进行查找并确认。

它同时具有列表和队列的功能:)

可能是下面,不是那个,你在找,反正 http://bxr.su/o/queue.h

于 2013-07-17T19:41:29.560 回答
1

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

queue.h 中的 LIST 也是一个 List ADT,在其中可以看到实现细节(它是作为双向链表实现的)。它是 LIFO,正如 queue.h 文件所说的那样(虽然很模糊)。是的,实现Stack ADT的一种方法是使用链表

于 2015-08-20T15:40:43.950 回答
0

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

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

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

* 无论出于何种原因,目前看来只有 6 个选项中的 4 个被正式记录在手册页中。见:http ://bxr.su/o/share/man/man3/queue.3

如果您希望能够INSERT_TAIL进入队列/列表,您仍然有很多选项可供选择—— SIMPLEQXSIMPLEQ和。TAILQCIRCLEQ

因此,总而言之:没有法律规定名称的队列/列表实现LIST必须允许尾部插入!

于 2015-10-01T09:51:16.477 回答