繁体   English   中英

气泡排序链接列表

[英]Bubble sort for 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,如果node1> node 2则返回1,反之则返回-1。

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

  3. lineComp —比较单词在与上述相同的返回值上出现的行号。

我了解气泡排序的工作原理以及获得排序列表的一般步骤。 我困惑的领域是如何调用comparePtr ,我需要传递给它什么? 我还有一个test.c文件,用于测试我的排序方法。 我将如何调用sort函数? 我不确定第二个和第三个参数要传递什么。

如果有人可以帮我解释一下,那就太好了!

如果您具有两个功能:

void intSwapPtr(struct lnode** head, struct lnode* n1, struct lnode* n2) {
    //definition
}

int intComparePtr(void* v1, void* v2) {
    //definition
}

那么您可以通过将那些函数作为参数传递来调用sort。 当用作参数时,这些函数将隐式转换为指向函数的指针。

swap(listHead, intSwapPtr, comparePtr)

在swap的定义内,您可以像调用任何其他函数一样调用swapPtrcomparePtr ,它们将被隐式取消引用。

在我看来,创建此标头的人都希望comparePtr接受两个指针并返回一个int,告诉您哪个节点在节点顺序中是“更大”的。

因此,您可以这样称呼它:

lnode * a = ...;
lnode * b = ...;
int comparison = comparePtr(a, b);
if (comparison < 0)
{
    // we know a comes after b
}
else if (comparison > 0)
{
    // we know a comes after b
}
else
{
    // a and b are equal as far as ordering is concerned
}

这就像红宝石飞船的操作员

void sortList(node *start) { head = start;

 for(ptr = head; ptr != NULL; ptr = ptr->next) { for(newptr = ptr->next; newptr != NULL; newptr = newptr->next) { if(ptr->data > newptr->data) { int temp = ptr->data; ptr->data = newptr->data; newptr->data = temp; } } } 

}

用于排序给定链接列表的此C ++函数正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM