我是C的新手。我不知道如何编写一个C函数,它创建一个空队列并返回一个void指针。
void* queue_open(void)
我也想知道如何编写一个C元素,它将一个元素放在队列的末尾。
void queue_put(void *p, void *elementp)
感谢您的帮助!
答案 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_open
和queue_put
应该很容易。我建议你首先定义一个代表你的队列元素的结构。
答案 2 :(得分:0)
您可以在此处了解队列:
http://en.wikipedia.org/wiki/Queue_(data_structure)
虽然您可以轻松地从上面的链接复制并粘贴示例代码,并且几乎没有修改解决您的作业问题,但您不会通过这样做来学到很多东西。
在概念性地理解队列之后,我建议您尝试自己实现它,然后在遇到问题时使用上面链接中的示例代码作为参考。
你能做的最好的事情就是和你班上比你聪明的另一个学生配对。然后将程序(http://en.wikipedia.org/wiki/Pair_programming)与他/她配对以解决问题。你会成为一个更好的程序员。