簡體   English   中英

氣泡式排序一個指針的鏈表

[英]Bubble sort a linked list with one pointer

我試圖用一個指針p_previous冒泡排序一個鏈表。 該指針應該向前看一個節點,也向前看兩個節點,並且如果第一個大於第二個節點,則將使用一個臨時變量來切換它們,而p_previous保持在交換之外。 p_previous還應該檢查兩個節點以查看列表預告片是否存在,從而停止排序。 老實說,我不知道在氣泡排序方面我在做什么,而且鏈表的實現也無濟於事。

這是一些代碼:

int sort_list(ID_NUMBER *p_list, int list_count)
{
    ID_NUMBER *p_previous = p_list; /* Previous node, use to swap next */
    ID_NUMBER *p_temp;              /* Temporary variable              */
    int count;                      /* Counts number of nodes passed   */

    for(count = 0; count < list_count; count++)
    {
        while(p_previous->p_next_student->p_next_student != NULL)
        {
        if(p_previous->p_next_student->student_id >
                p_previous->p_next_student->p_next_student->student_id)
        {
            p_temp = p_previous->p_next_student->p_next_student;
            p_previous->p_next_student = p_temp->p_next_student;
            p_temp = p_previous->p_next_student;
            p_previous->p_next_student = p_temp;
        }
        p_previous = p_previous->p_next_student;
        }

    }
    return 0;
}

這就是我所知道的。

如果這是我輸入的清單。

H-> 1-> 3-> 2-> 4-> T

1和3已經按順序排列,向下移動p_previous

3和2亂序,使temp變量指向2。

使3指向數字4。

使2指向數字3。

將1指向數字2。

我認為這就是我應該怎么做,我只是不知道如何將其放入代碼中。 我非常確定for循環內部的while循環是必需的。

如果有人可以幫助,那就太好了。

另外,如果您需要更多信息,請詢問。

這里有幾個基本問​​題(例如您不能更改列表中的第一項),但是最基本的問題是交換:

        p_temp = p_previous->p_next_student->p_next_student;
        p_previous->p_next_student = p_temp->p_next_student;
        p_temp = p_previous->p_next_student;
        p_previous->p_next_student = p_temp;

假設我們有三個項目,我們將其稱為ABC。我們想要ACB。現在您開始做:

p_previous = A
p_temp = A->next->next = C

這是走錯路了。 我們將A-> next指向C。問題是,這樣做時我們將丟失B。p_temp應該存儲B。

p_temp = A->next = B
p_previous->next= p_previous->next->next = C
p_temp->next= p_previous->next->next = {whatever came after}
p_previous->next->next= p_temp = B

然后,您只需要處理其他問題,例如當列表中只有一項時崩潰。

另外,您可能需要執行以下操作:

for(count = 0; count < list_count; count++)
{
  p_previous = p_list;

這樣您就可以遍歷列表冒泡值N次,而不是一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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