我是C的新手,我不知道如何编写一个创建空队列并返回空指针的C函数。
void* queue_open(void)
我还想知道如何编写一个C函数,将元素放在队列的末尾。
void queue_put(void *p, void *elementp)
谢谢你的帮助!
如果你来自一个面向对象的背景(你的方法签名似乎表明)。
面向对象的思想->在C中实现的好方法
对象创建-> malloc一个结构体,然后传递给初始化函数
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为你做一些类型检查。
实现一个方法->创建一个函数,该函数接受一个指向"几乎this"结构体的结构指针。
struct user* user = ... whatever we do here ...;
queue_add(q, (void*)user);
至于如何实际实现队列,我建议一个好的数据结构或算法书,因为有很多方法去做;而且,您选择的特定技术将对性能和可靠性产生不同的影响。没有最好的方法,这在很大程度上取决于如何使用队列,以及性能的哪些方面更重要。
我推荐的书是《算法导论》。对于大多数情况,这本书都是多余的,它非常详细地列出了您在编程的头几年可能遇到的几乎所有主要数据结构。因此,它是一个很好的参考,尽管它尝试了一种语言中立的方法,但与普通编程语言相比,现在看起来很奇怪。一旦你明白了是怎么回事,你几乎可以用任何语言来做。
您需要决定队列元素应该是什么样子,队列是什么,以及队列为空意味着什么。如果你知道这些,写出queue_open
和queue_put
就很容易了。我建议您首先定义一个表示queue元素的结构。
您可以在这里了解队列:
http://en.wikipedia.org/wiki/Queue_ (data_structure)
虽然您可以轻松地从上面的链接复制并粘贴示例代码,并且只需稍加修改即可解决您的作业问题,但这样做不会学到很多东西。
在概念上理解队列之后,我建议您尝试自己实现它,然后在遇到困难时使用上面链接中的示例代码作为参考。
你能做的最好的事情就是和班上比你聪明的另一个学生结对。然后和他/她结对编程(http://en.wikipedia.org/wiki/Pair_programming)解决问题。你会成为一个更好的程序员。