C语言中的基本数据结构库,例如Queue

时间:2009-07-23 17:55:08

标签: c data-structures queue

问题:为队列找到正确的数据结构:

 #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)

问题:基本数据结构的库是什么,例如示例中的队列?

4 个答案:

答案 0 :(得分:11)

这看起来像TAILQ_ *的很好的候选人?

#include <sys/queue.h>
“man queue”将提供更多细节 - 那里有简单的列表,尾部队列和循环队列。那些是您需要在自己的结构上固定的宏,当然不是类。

你的场景的代码看起来像这样(我应该让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_宏的答案。