用鍊錶寫的氣泡排序理解

2022-08-02 05:18:13 字數 778 閱讀 2087

這是一位師弟問的問題,一段用鍊錶寫的氣泡排序。

[1] 為什麼要多用乙個空的表頭?

這是由鍊錶結構造成的,如果要交換p1和p2兩個節點,則需要p1的前趨的指標,舉例,設原鍊錶為如果我們要交換3和2,由於3是表頭節點,所以需要乙個指向3的指標節點,因此這裡我們設定了乙個空的頭節點p1,第乙個元素的位置實際上在head->next上。

[2] 釋放指標方式解讀

最後要釋放掉這個空的頭節點,先儲存下這個位址p1=head,實際表的位址指回原來的位置(head=head->next),然後釋放p1的指標,釋放指標實際就是讓p1不要指向head。如果你直接head』=head->next,雖然我們不知道原來的head在**了,但是它仍然是指向現在的head『的,這就是所謂的野指標,這就涉及到指標的知識了,學生黨寫寫程式沒關係,但是放到專案裡面,就非常不好了。關於這個在指標學習系列裡面我再仔細寫寫。

[3] 總結

熟悉用陣列寫的冒泡,用演算法的思路去思考這個問題,或者寫個簡單的序列手動模擬程式排序的過程或者讓程式輸出來排序的過程,便於理解。

用鍊錶實現氣泡排序!

我們需要把資料儲存在鍊錶中,然後呼叫排序函式就可以了。但必須要注意鍊錶與陣列的不同點,鍊錶沒有下標,要想訪問資料域必須通過節點來訪問。二 實現 include includetypedef int elemtype typedef struct node node,plist void init p...

用鍊錶寫插入排序

時間限制 1 sec 記憶體限制 128 mb 提交 454 解決 312 提交 狀態 討論版 輸入10個數,按照插入排序方法進行排序。注意 輸出最有乙個數值後有個空格 2 4 6 6 7 9 9 10 10 25 25後面有乙個空格 4 6 7 2 6 9 10 25 9 102 4 6 6 7 ...

鍊錶氣泡排序

2011 07 22 21 33 111人閱讀收藏 舉報 任意兩個相鄰節點p q位置互換圖示 假設p1 next指向p,那麼顯然p1 next next就指向q,p1 next next next就指向q的後繼節點,我們用p2儲存 p1 next next指標。即 p2 p1 next next,則...