是否存在任何与C一起“来”的Queue数据结构实现,或者我是否必须自己开发(这是针对学校项目的,因此我必须使用标准gcc安装中存在的东西或必须实现一个靠我自己!)
如链接列表,堆栈等其他常规数据结构呢?
由于
答案 0 :(得分:22)
试试这个。 Unix带有几种链表 - 您可以使用其中一种链接列表来创建其他可能基于列表的结构,例如堆栈。
man queue
答案 1 :(得分:2)
你必须实现自己的。 C在数据结构方面很少,并且迫使您采用可论证的技巧来实现抽象数据类型:如果您能找到它,请参阅标题为“不完整类型为抽象”的文章,或者查看原则如何应用于,例如, PolarSSL's bignum.h file。另一方面,C ++应该允许你在C中做几乎所有的事情,并为你提供实现抽象数据结构的方法。
答案 2 :(得分:2)
没有。但这是一个非常简单的实现:
typedef struct node {
int val;
struct node *next;
} node_t;
void enqueue(node_t **head, int val) {
node_t *new_node = malloc(sizeof(node_t));
if (!new_node) return;
new_node->val = val;
new_node->next = *head;
*head = new_node;
}
int dequeue(node_t **head) {
node_t *current, *prev = NULL;
int retval = -1;
if (*head == NULL) return -1;
current = *head;
while (current->next != NULL) {
prev = current;
current = current->next;
}
retval = current->val;
free(current);
if (prev)
prev->next = NULL;
else
*head = NULL;
return retval;
}
完整来源here
答案 3 :(得分:0)
您可以使用named pipe。它是FIFO数据结构,是posix标准的一部分。如果你想要的只是后面的enque并从前面移除它将工作。您需要手动跟踪消息边界,可能是将第一个元素作为下一条消息中的字节数。
答案 4 :(得分:0)
GLib(不要与glibc混淆)实现了许多常见的数据结构,包括双端队列。与FreeBSD's macro-based queues不同,GLib's GQueues基于函数,这些函数可能更易于调试和类型检查。
https://developer.gnome.org/glib/stable/glib-Double-ended-Queues.html
答案 5 :(得分:-1)
您必须实现自己的数据结构,但那里有许多数据结构库。
答案 6 :(得分:-1)
如果这是一个“学校项目”,那么实施您自己的数据结构可能会在标记方案上,并且使用库调用可能会阻止审查员授予这些标记。
ISO C标准库不包含此类数据结构,但GNU libc不仅涵盖ISO标准。这包括可能符合您要求的Pipes and FIFOs。
答案 7 :(得分:-1)
不是标准的,但许多系统都有bsd/sys/queue.h
和bsd/sys/tree.h
基于宏的库。
答案 8 :(得分:-1)
使用BSB lib。 sys / queue.h和sys / tree.h 有各种列表和树的实现。