如何编写一个创建空队列的c函数?

时间:2011-09-28 19:28:10

标签: c queue linked-list

我是C的新手。我不知道如何编写一个C函数,它创建一个空队列并返回一个void指针。

void* queue_open(void)

我也想知道如何编写一个C元素,它将一个元素放在队列的末尾。

void queue_put(void *p, void *elementp)

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

如果您来自面向对象的背景(正如您的方法签名似乎表明的那样)。

面向对象的想法 - >在C

中做到这一点的好方法

对象创建 - > malloc一个struct,然后将它传递给初始化函数

struct queue* q = (struct queue*)malloc(sizeof(struct queue));
queue_initialize(q);

如果你愿意,你可以将它包装在一个函数中,如此

struct queue* queue_construct() {
  struct queue* q = (struct queue*)malloc(sizeof(struct queue));
  queue_initialize(q);
  return q;
}

请注意,这些指针不应指向void *,让C至少为您执行一些类型检查。

实施方法 - >创建一个函数,该结构指针指向“几乎这个”结构。

struct user* user = ... whatever we do here ...;
queue_add(q, (void*)user);

至于如何实际实现队列,我建议一个好的数据结构或算法书,因为有很多方法可以解决它;并且,您选择的具体技术将对性能和可靠性产生不同的影响。没有一种最好的方法,它在很大程度上取决于队列的使用方式,以及性能的哪些方面更重要。

我推荐的这本书是Introduction to Algorithms。在大多数情况下,本书都是过度的,并且在编程的最初几年中,您可能会遇到几乎所有主要数据结构的详细列表。因此,尽管它采用了语言中立的方法,但它与普通的编程语言相比现在看起来很奇怪,因此它提供了很好的参考。

一旦了解了正在发生的事情,您几乎可以用任何语言进行操作。

答案 1 :(得分:1)

您需要确定队列元素应该是什么样的,队列是什么,以及队列为空的含义。如果你知道这些事情,写queue_openqueue_put应该很容易。我建议你首先定义一个代表你的队列元素的结构。

答案 2 :(得分:0)

您可以在此处了解队列:

http://en.wikipedia.org/wiki/Queue_(data_structure)

虽然您可以轻松地从上面的链接复制并粘贴示例代码,并且几乎没有修改解决您的作业问题,但您不会通过这样做来学到很多东西。

在概念性地理解队列之后,我建议您尝试自己实现它,然后在遇到问题时使用上面链接中的示例代码作为参考。

你能做的最好的事情就是和你班上比你聪明的另一个学生配对。然后将程序(http://en.wikipedia.org/wiki/Pair_programming)与他/她配对以解决问题。你会成为一个更好的程序员。