2011-09-28 99 views
2

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

void* queue_open(void) 

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

void queue_put(void *p, void *elementp) 

感谢您的帮助!

+5

这功课吗?您的参考资料对实施链接列表有什么看法? –

+0

是的,这是我的作业。基本上就像我一样,创建一个购物清单来从键盘输入条目。每个条目由要购买的物品(字符串)和要购买的物品数量(int)组成。所有项目输入后,打印购物清单,从队列中移除所有条目,关闭队列。作为我们使用模块化编程的家庭工作,如函数创建一个空队列。我有使用函数,如queue_open和queue_put完成的主要功能。现在,我不知道如何编写这些功能。 – user969810

+0

你在课堂上学到了什么?你有参考资料吗?教科书?当然你可以在网上找到链接列表代码。 –

回答

1

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

+0

这是我的结构: typedef struct item { int num; char name [MAXSTR]; } Item; – user969810

+0

* *可能是你队列中的一个元素,但是它是一个队列?队列中两个连续元素之间的关系如何?您打算如何创建这种关系?这里有一个提示:可以实现队列的两个基本结构是链表和数组。 – Caleb

+0

下一个指针和什么? – user969810

0

您可以了解队列在这里:

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

虽然你可以很容易地从上方并稍加修改的链接复制并粘贴示例代码解决你的功课问题,你是不是要学习很多这样做。

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

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

2

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

面向对象的思想 - >好办法做到在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至少做一些类型的检查。

实现一个方法 - >创建一个函数,该函数将结构指针指向“几乎这个”结构。至于如何真正实现一个队列,我建议一个好的数据结构或算法的书,因为有很多方法可以去做;而且,而且,您选择的具体技术将对性能和可靠性产生不同的影响。没有最好的方法,它很大程度上取决于如何使用队列,以及哪些方面的性能更重要。

我推荐的这本书是Introduction to Algorithms。这本书对大多数情况来说都是过分的,对于在编程的前几年可能遇到的几乎所有主要数据结构都有非常详细的列表。因此,尽管它试图采用语言中立的方法,但与常用编程语言相比,它现在看起来很奇怪,因此它是一个很好的参考。

一旦你明白发生了什么,你几乎可以用任何语言做到这一点。