考研王道大題第二章第六題,使無序的鍊錶有序

2021-08-30 17:58:08 字數 1188 閱讀 5879

考研 王道資料資料結構課後習題第二章第六道

6.有乙個帶頭節點的單鏈表l,設計乙個演算法使其元素遞增有序

void sort(linklist &l)   //外層迴圈完畢

//如何保證有序?

//由於第一次向被查煉表中插節點時,被插入鍊錶中只含有頭節點(不含資料)和初始鍊錶的第乙個節點,所以,

//所以第一次遍歷前,被查鍊錶中只有乙個有效的節點

//在第一次執行遍歷完的時候就是有序的

//然後每次執行遍歷都將有序

//從而保證最後是有序的

//思想就是,方向是對的,每步都沒錯,那麼結果肯定沒錯。

//演算法正式開始

lnode *p = l->next,*pre;

lnode *r=p->next; //p和r為資料鏈表工作指標

//pre是又當爹又當媽的被插入鍊錶的工作指標,在被插入鍊錶中,既做插入位置的標記指標又做插入操作之前的控制比較指標

//pre相當於插入操作的p(插入操作指標) pre->next相當於插入操作的q(比較指標)

//而被插入鍊錶和資料鏈表的定義在下一段的解釋說明中

//在本函式的變數定義階段,共定義了三個指標變數 分別為pre/p/r 注意**指標,防止出現懸垂指標

p->next=null; //頭節點和第乙個節點與之後的鍊錶進行斷鏈操作

//現在有兩個鍊錶

//至此,頭節點和第乙個節點相連為被插入鏈, 第二個節點和剩下的節點相連為資料鏈

p=r;//p和r指向第二個節點

printf("本演算法實現將單鏈表l的節點重新排序,使其遞增有序");

while(p)

//比較完成後,開始進行被插入鍊錶的插入操作

p->next=pre->next; //還是先右後左向被插入鍊錶的合適的位置插入資料鏈表的頭節點

pre->next=p;

p=r; //將p再次放在被刪除頭節點的資料鏈表的頭節點上

} //**pre/p/r指標,防止出現野指標,即懸垂指標

pre=null;

p=null;

r=null;

}// void sort(linklist &l)函式結束

第二章第六天介面

介面的概述 介面 介面就是一組功能 能力 規範 特點 實現多型 解決了繼承的單一繼承的問題。注意事項 多組合,幫助程式功能與功能之間解耦,程式的擴充套件性好 維護性好 介面側重能力,忽略實現細節 面向介面程式設計,乙個介面可以同時繼承多個介面 例一 對貫穿本書的案例電子寵物系統的類結構進行重構,要求...

F 入門 第二章 F 基礎 第六節 匿名函式

關於用let語句定義函式的方法在前面一節已做了介紹,除此之外f 中還可以使用匿名函式。匿名函式定義如下所示。定義匿名函式 fun 引數1 引數2 函式體 fun關鍵字表示開始定義匿名函式。讓我們看乙個具體的示例。匿名函式示例 fun x x 1 val it int int 以上是加1的匿名函式。從...

F 入門 第二章 F 基礎 第六節 匿名函式

關於用let語句定義函式的方法在前面一節已做了介紹,除此之外f 中還可以使用匿名函式。匿名函式定義如下所示。定義匿名函式 fun 引數1 引數2 函式體 fun關鍵字表示開始定義匿名函式。讓我們看乙個具體的示例。匿名函式示例 fun x x 1 val it int int 以上是加1的匿名函式。從...