c - 链表的冒泡排序

标签 c list sorting linked-list

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

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/

相关文章:

c - 在本地函数之外分配内存后,C 是否会自行释放内存?

c - C中的枚举指针参数

java - java eclipse中的断点错误

仅当超出范围时 C 缓冲区才会溢出

c - 在setsockopt()中为SO_RCVBUF指定的新值何时生效?

python - 从字典列表中获取值列表

c# - 从数据表获取字节数组到列表 C#

java 初学者 : which is preferred when class has arraylist of arraylist (clone(), 不可修改列表,自定义深度复制)

algorithm - 简单依赖算法的问题

arrays - 创建未排序数组索引的最快方法