我正在为双向链接列表编写降序排序函数。我有一个最大值的标志,但想知道是否有一种方法来存储节点指针的地址,这样我就可以在操作完成后在循环外设置它的标志。
由于 在这种情况下,我们的数据是相关性
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;
}
这不是一种奇特的类型,只是试图对我的数据进行简单的降序排序。一旦找到最大的,我想将其nodes标志设置为true。只需要一种存储地址的方法。
答案 0 :(得分: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;
答案 1 :(得分:0)
如果您使用std::list
,则可以使用具有不同比较函数的std::sort
,而不必为每个不同的排序顺序更改节点结构。
另一个想法是将您的商品放入std::vector
并为每件商品创建std::list<item *>
。这将允许您以各种顺序访问向量中的项目。例如,一个列表可以按标题升序。另一个可能是相关性下降。