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