0

我目前正在为双向链接列表编写降序排序函数。我有一个最大值的标志,但想知道是否有办法存储节点指针的地址,这样我就可以在操作完成时在循环外设置它的标志。

谢谢 在这种情况下,我们的数据是相关的

float findLargest(DoublyLinkList largestdata)
{
    ListPlayHolder *findbiggest = largestdata.lhead;
    float largest = findbiggest ->relevance;
    while (findbiggest ->next != NULL)
    {
        if (findbiggest ->relevance > largest && findbiggest ->largestFlag != true)
        {
            largest = findbiggest ->relevance;
        }
        findbiggest = findbiggest->next;
    }

    return largest;
}

这不是花哨的排序,只是试图对我的数据进行简单的降序排序。一旦我找到最大的,我想将它的节点标志设置为真。只需要一种存储地址的方法。

4

2 回答 2

0

据我了解,您只需要保留一个指向最大元素的指针,所以没什么特别的,只是另一个ListPlayHolder*(这似乎是指向节点的指针的数据类型 - 如果您问我,这是一个非常令人困惑的名称,但无论如何)。

另外,我建议不要largest用指向的东西初始化 - 还没有看到你的其他列表代码,但我猜如果列表为空findbiggest,指针可能是空的。NULL

如果您改为持有当前最大对象的指针(感谢@WhozCraig),您实际上不需要单独存储相关性值。这是修改后的代码:

ListPlayHolder* findbiggest = largestdata.lhead;
ListPlayHolder* largest = findbiggest;
while (findbiggest && findbiggest ->next != NULL)
{
    if (findbiggest ->relevance > largest->relevance && findbiggest->largestFlag != true)
    {
        largest = findbiggest;
    }
    findbiggest = findbiggest->next;
}
// here do whatever modifications you need to do to flags? or maybe return largestPtr?
largest->largestFlag = true;
return largest->relevance;
于 2013-10-14T19:48:53.590 回答
0

如果您使用过std::list,您可以使用std::sort不同的比较函数,而不必为每个不同的排序序列更改节点结构。

另一个想法是将您的项目放入 astd::vectorstd::list<item *>为每个项目创建。这将允许您以各种顺序访问向量中的项目。例如,一个列表可以用于按标题升序。另一个可能是相关性下降。

于 2013-10-14T19:49:08.193 回答