鏈表結構體問題

struct Lnode *next中,爲何struct Lnode 能夠重複定義呢?括號外已經有struct Lnode ,怎麼裏面還能用這種類型?
在括號外面定義的是結構體,意思就是我要定義一個結構體了,裏面有什麼什麼數據,而在裏面定義的*next結構體類型的指針,意思是,我定義的結構體每一個結點裏面有個指針指向的是結構體類型的數據,不是從新定義了。一個指針類型的成員是能夠指向本身所在的結構體類型的數據的

*Linklist至關於一個數組頭指針,只是這個數組的元素是結構體
*next則是構成鏈表的一個基本元素,指向該結點下一個結點的地址
從某種意義上講,*Linklist是指定了這段空間在內存中的位置(能夠申請連續的結點空間),而*next則對結點進行了必定的空間排序

1 Typedef  struct  LNode { 
2       ElemType      data;  // 數據域 
3       struct Lnode   *next;  // 指針域 
4    } LNode, *LinkList;    
5 LNode爲結點      LinkList爲指向鏈表的指針 
6 LinkList  L;  // L 爲單鏈表的頭指針,是一個地址 

 



爲何要採用鏈式存儲(鏈表)存在的意義 爲何要採用鏈式存儲: 與數組相比,鏈式存儲(即鏈表)有以下兩個優勢: 一、數據元素的個數不肯定,隨時可能增減。採用固定大小的數組浪費空間。 二、方便排序,對於數組來講,每次插入一個元素均可能致使大量數據的移動。 有缺點嗎: 與數組相比,鏈式存儲有一個很大的缺點——讀取數據! 對於讀取其中指定第N個數據,鏈表必須從頭結點用p = p->next(頭結點不存儲數據);一直遍歷N次或N-1次(頭結點存儲數據)。因此在須要頻繁索取某些指定數據的狀況下,犧牲空間爲代價換取更優的性能就須要採起數組這種數據結構了。
相關文章
相關標籤/搜索