簡體   English   中英

通過指針比較聚合類型的成員值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM