在實現學生成績(存入很多態別資料,如學號,成績,課程號等)排序的時候,要根據正序輸出。因為在以前做過陣列的選擇排序,所以本來以為鍊錶差不多,但是在實際操作的時候出現了很多問題。
1.選擇排序的原理就是
2.首先是怎麼交換位置,誠然,利用改變指標的指向可以交換節點。但是我覺得可以通過交換結構體的內容,而不動節點本身。
typedef struct studentstudent;
typedef struct coursecourse;
typedef struct coursegradecoursegrade;
typedef struct allinformationallinformation;
typedef struct linknodelinkstnode;//重點,只需要交換'a'
3.在初始化指向結構體的指標時需要賦值,否則就成為懸空指標,後果不可預知。
4.第乙個for迴圈對應被比較的指標的移動,第二個for迴圈對應第二個比較指標的移動。第乙個,第二個迴圈的結束條件都是是pt2!=null;
5.注意,指向結構的指標(最外層的結構名)指向內容時,用**『->』。下層結構用『.』** 翻譯為「的」。
6.乙個關鍵點是,pt1的內容和pt2內容的交換。因為基本思路是不交換節點,只交換節點的內容(之所以結構的巢狀也是為了實現這個思路),所以需要乙個p儲存pt1的內容(如同所有交換數值的操作)。這個時候p不能是指標。
linkstnode *p=pt1;//這是錯的 linkstnode p; p.a=pt1->a;//這是對的
因為,如果將這裡將pt1賦值給p,相當於將pt1指標賦值給指標p,pt1變化,p也會變化,所以要把p變為結構體而不是指標。
因此,此函式如下
linkstnode* sortlist(linkstnode* pheadnode)}}
return pheadnode;
}//鍊錶的選擇排序
還有需求沒有實現,任重而道遠。 選擇排序 C語言實現
選擇排序是一種簡單直觀的排序演算法,它與氣泡排序很相似,都是比較n 1輪,每輪 n 1 i 次每輪找出乙個最大 最小值。只不過冒泡放最後,選擇排序放最左。本文以從小到大排序為例 與冒泡的比較 冒泡是將相鄰的數逐個進行比較 從小到大為例 只要前面的比後面的大,就互換倆數,直到最後將最大的數 浮到 最末...
選擇排序,C語言實現
下面我們來介紹一下選擇排序。選擇排序的思想是每次都從剩餘的元素中找到最小值,然後把這個最小值放到已經有序的部分元素的後面。這個過程的時間複雜度為o n 一共需要找n個元素,所以總的時間複雜度是o n2 其中,尋找最小值的 如下 int minindex i int min arr i for int...
資料結構 C語言實現選擇排序
一 選擇排序簡介 選擇排序是外層進行n 1趟排序,內層進行n 1趟排序,每一趟選出最大或最小的資料放在最前面。二 實現 include 將兩個資料交換 void swap int ina int inb 函式功能 選擇排序,把資料從小到大排序 引數解釋 inarray 輸入的陣列 inlen 輸入的...