如下圖為單鏈表示意圖: 只列出頭文件以及單鏈表相關函數實現代碼,均來源于書上,并整理出分析過程。
重要經驗:當編寫涉及指針的數據結構或者算法時,最好先畫出結構圖分析過程,再進行寫代碼。(其實,除了涉及指針的要,很多數據結構、圖論等相關算法都先畫圖分析,清楚思路后才碼代碼較好)
以下為分析過程圖
雙向鏈表如下圖所示: 即在單鏈表的每一個節點Node結構體上,加多一個struct Node * 的指針指向上一個結構體
優缺點
優點:簡化刪除操作,因為有現成的指向前一個指針可以更改指向即可缺點:增大空間需求(代碼量),插入開銷增加一倍,有雙向指針要搞如下圖所示,即在單(雙)鏈表末端不接NULL,使其返回指向表頭。 如下圖為雙向循環,同理也有單向循環。
缺點:對于非稠密型多項式運算緩慢
2.多項式ADT(單鏈表實現)(暫時不會。。。) 只有一部分聲明。。
// 鏈表實現直接不要系數為0的項,且按階數遞減排序typedef struct Node * PtrToNode;struct Node{ int Coefficient; int Power; PtrToNode Next;};typedef PtrToNode Polynomial;3.桶式排序&基數(卡式)排序
桶式排序思想:要求N個整數排序,且已知范圍為1-M。 步驟:4.注冊表 eg:要知道一個學校的每個班的注冊人以及每個學生對應注冊的班級 可以利用如下多重表
有些編程語言,如Basic等沒有指針,此時就不能基于指針來寫鏈表了。此時引入新的ADT”游標”來代替指針,且此時要重寫關于malloc與free的游標形式的函數。
注意鏈表有以下特性: 因此,游標鏈表也應該具有以上特點。
|
新聞熱點
疑難解答