我正在研究链接列表的冒泡排序函数。这是该函数的标题:
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,如果节点 1 > 节点 2,则返回 1,反之则返回 -1。wordComp
— 比较给定节点的单词,返回值与上面相同。lineComp
— 比较单词在与上述相同的返回值上出现的行号。
我了解冒泡排序的工作原理以及实现排序列表的一般步骤。我感到困惑的地方是如何调用comparePtr以及我需要传递什么给它?我还有一个 test.c 文件用于测试我的排序方法。我将如何调用排序函数?我不确定第二个和第三个参数应该传递什么。
如果有人能帮我解释一下,那就太好了!
最佳答案
如果你有两个函数:
void intSwapPtr(struct lnode** head, struct lnode* n1, struct lnode* n2) {
//definition
}
int intComparePtr(void* v1, void* v2) {
//definition
}
然后你可以通过将这些函数作为参数传递来调用排序。当用作参数时,函数将隐式转换为函数指针。
swap(listHead, intSwapPtr, comparePtr)
在 swap 的定义中,您可以像调用任何其他函数一样调用 swapPtr
和 comparePtr
,它们将被隐式取消引用。
关于c - 链表的冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793019/