gpt4 book ai didi

c - 链表的冒泡排序

转载 作者:行者123 更新时间:2023-11-30 17:57:29 28 4
gpt4 key购买 nike

我正在研究链接列表的冒泡排序函数。这是该函数的标题:

void sort(struct lnode** head,
void (*swapPtr)(struct lnode** head, struct lnode* n1, struct lnode* n2),
int (*comparePtr)(void* v1, void* v2))

我不太明白正在使用的函数指针。 swapPtr 是一个函数指针,指向用于交换列表中两个节点的函数。 comparePtr 用作指向三个函数之一的指针,所有这些函数都比较结构中某个成员中的值,该结构用于存储给定单词的计数和行号。可能性是:

  1. countComp — 采用两个节点并比较单词出现的次数,如果相等则返回 0,如果节点 1 > 节点 2,则返回 1,反之则返回 -1。

  2. wordComp — 比较给定节点的单词,返回值与上面相同。

  3. 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 的定义中,您可以像调用任何其他函数一样调用 swapPtrcomparePtr,它们将被隐式取消引用。

关于c - 链表的冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com