问题:为队列找到正确的数据结构:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
int main(int argc, const char *argv[])
{
Queue q;
ch ='A';
for (int k = 0; int k < 4; int k++) {
q.addQ(ch);
ch++;
q.addQ(ch);
ch=q.front();
q.removeQ();
}
return 0;
}
我尝试编译它,但是队列未声明:
$ gcc -o Qu_1 -g q_queue.c
q_queue.c: In function 'main':
q_queue.c:8: error: 'Queue' undeclared (first use in this function)
问题:基本数据结构的库是什么,例如示例中的队列?
答案 0 :(得分:11)
这看起来像TAILQ_ *的很好的候选人?
#include <sys/queue.h>
你的场景的代码看起来像这样(我应该让add_to_queue返回一些代码来检查错误,并避免全局变量,但希望在这个例子中我会被原谅):
#include <stdio.h>
#include <stdlib.h>
#include <sys/queue.h>
TAILQ_HEAD(tailhead, entry) head;
struct entry {
char c;
TAILQ_ENTRY(entry) entries;
};
void add_to_queue(char ch) {
struct entry *elem;
elem = malloc(sizeof(struct entry));
if (elem) {
elem->c = ch;
}
TAILQ_INSERT_HEAD(&head, elem, entries);
}
int main(int argc, char *argv[]) {
char ch = 'A';
int i;
struct entry *elem;
TAILQ_INIT(&head);
for (i=0; i<4; i++) {
add_to_queue(ch);
ch++;
add_to_queue(ch);
elem = head.tqh_first;
TAILQ_REMOVE(&head, head.tqh_first, entries);
free(elem);
}
exit(0);
}
答案 1 :(得分:5)
一个很好的选择是使用C Generic Library。这是在C ++ STL上(松散地)建模的C库。它提供了队列结构,列表等。
答案 2 :(得分:1)
标准C库中没有一个;通过相关帖子追溯,看起来Queue数据结构是由学生编写的。
与C ++不同,标准C库不提供标准的容器集。
答案 3 :(得分:-8)
首先,你需要C ++,而不是C. C不是面向对象的语言,它没有像队列这样的标准库。
对于C ++,查找std :: queue。
#include <queue>
int main(int argc, const char *argv[])
{
std::queue q;
/// etc;
}
你可以,当然,在C中制作类似队列的结构,但你最终会自己做很多工作。请参阅下面有关TAILQ_宏的答案。