【发布时间】:2012-09-29 08:53:25
【问题描述】:
我正在研究链表的冒泡排序功能。这是函数的标题:
void sort(struct lnode** head,
void (*swapPtr)(struct lnode** head, struct lnode* n1, struct lnode* n2),
int (*comparePtr)(void* v1, void* v2))
我不太了解所使用的函数指针。 swapPtr 是一个函数指针,指向用于交换列表中两个节点的函数。 comparePtr 用作指向三个函数之一的指针,所有这些函数都比较用于存储给定单词的计数和行号的结构的某个成员中的值。可能性是:
countComp— 取两个节点并比较单词出现的次数,如果相等则返回 0,如果 node1 > 节点 2 则返回 1,反之则返回 -1。wordComp— 比较给定节点的单词,返回值与上述相同。lineComp— 比较单词在与上述相同的返回值上出现的行号。
我了解冒泡排序的工作原理以及实现排序列表的一般步骤。我感到困惑的领域是如何拨打comparePtr,我需要传递什么信息?我还有一个test.c 文件用于测试我的排序方法。我将如何调用排序函数?我不确定第二个和第三个参数应该传递什么。
如果有人能帮我解释一下,那就太好了!
【问题讨论】:
-
我假设 countComp 比较字符数,wordComp 比较单词,lineComp 比较行,对吧?只需定义您的
swap函数,选择您要比较的内容,然后将其命名为sort(my_head, &swap, &_ANY_Comp)。 -
comparePtr的参数是不透明的,所以假设是:函数实现理解传入的内容以及如何将其转换为有意义的类型。sort作为调用者也需要知道这一点。
标签: c list sorting linked-list