單鏈表進行排序 通過節點交換,不通過值交換

2021-06-21 15:04:32 字數 1304 閱讀 5274

原來我一直都不會對鍊錶進行排序,呵呵,比較菜。今天下了很大的功夫學習對鍊錶的排序,和大家分享一下!

對鍊錶的排序主要有兩種方法:

一:只交換節點中的元素,不改變鍊錶的順序。

二:直接交換節點,不改變節點中的元素。

其中交換節點是最麻煩的,稍不注意就會出錯!而交換節點中的元素還是比較簡單的。用幾個swap( )就可以了。

單鏈表的氣泡排序法:

typedef struct linklnode, *linklist;

linklist createlink( linklist *head, int num )

return ( *head )->next;

}// createlist

// 用冒泡法對鍊錶中的節點排序

void bubblesort( linklist head )

// 節點後移

p = p->next;

prep = prep->next;

}tail = p;

}// 第乙個while

}// bubblesort

void print( linklist head )

}int main( void )

我在剛開始的時候也是沒能夠自己想出來,怎麼弄都弄不好。在網上搜了一些,終於看懂了。但是他們寫的基本沒有注釋,可讀性很差。所以我就自己寫了乙個。

單鏈表的氣泡排序法的難點在於如何實現雙重迴圈,好好理解其中那個tail的用法;以及以及如何交換節點,注意temp的用法。

下面是單鏈表通過交換資料的排序方法(雙迴圈有點像氣泡排序法):

#include

#include

#include

#include

typedef struct linklnode, *linklist;

linklist createlink( int num )

return head;

}// createlink

int listlength( linklist head )

return len;

}void sortlink( linklist *head )

// 節點後移

p    = p->next;

prep = prep->next;

}}// while

}// sortlink

// 輸出鍊錶中的資料

void printlink( linklist head )

}int main( void )

單鏈表之排序單鏈表

package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...

單鏈表排序

思路1 將鍊錶中的資料存入陣列中,使用陣列進行排序,排好後再存入鍊錶中。當然這並不是這題所要考察的。但是在實際應用中卻相當有價值。因為鍊錶中的排序演算法都比較慢,進行轉存再排序也是一種很好的方法。思路2 排序演算法有 1,插入排序 簡單插入排序,希爾排序 2,交換排序 氣泡排序,快速排序 3,選擇排...

單鏈表排序

1 歸併排序 將鍊錶拆分成兩個鍊錶,遞迴,歸併,將兩個已排序鍊錶合併 public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge...