![](/img/trans.png)
[英]partial template specialization for non type member function pointer values
[英]Comparing member values of aggregate type via pointer
我在鏈表中排序節點時遇到了一些問題。 我能夠成功地實現列表本身,但是當我嘗試對它進行排序時,我失敗了。 我相信這是一個與我嘗試比較聚合類型的引用指針有關的問題。 我對指針或者一般的c ++編程都不是很有經驗。 如果有人能幫我指出正確的方向,我將非常感激。
void sortNodes()
{
int y, tmp;
y = nodeCount();
Node *curr, *prev;
for (int i = 0; i < y; i++)
{
curr = root;
for (int j = 0; j < y; j++)
{
prev = curr;
curr = curr->next;
if (prev->x > curr->x)
{
tmp = prev->x;
prev->x = curr->x;
curr->x = tmp;
}
}
}
curr = 0;
prev = 0;
}
你的第二個循環迭代一次太多次(它運行y
次並且每次執行curr = curr->next
然后才訪問curr->x
)。 此外,您不必每次都運行第二個循環到最后,第一次運行后最后一個節點將包含最大值,兩次運行后最后兩個節點將具有最大值,等等。
否則它對我來說看起來像一個很好的氣泡。 如果你是那種東西......
您是否嘗試按順序對列表進行排序,例如1,2,3,4,5 ... n。 如果是這樣,我想指出您的代碼只會使用下一個元素對當前元素進行排序。 而不是整理整個列表。 因此,如果您有一個列表:9,5,8,7,6,5,4,2。並且您希望按升序排序。 您最終獲得了一個列表:5,8,7,6,5,4,2,9。因為它只比較兩個節點並交換它們。 如果要對整個列表進行排序,只要當前元素小於前一個元素,就需要另一個循環向后循環到根目錄。 您可能需要另一個函數而不是向后循環,將前一個節點推送到當前節點,直到前一個節點小於臨時節點。 您可能還會發現索引和迭代器在此排序中很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.