昨天初步學習了linux核心鍊錶,記錄一下
首先要先知道結構體的乙個很隱秘的知識點,如下:
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
typedef struct worker
;int main()
有了這個基礎就可以理解linux核心鍊錶了
typedef struct _tag_linklistnode
linklistnode;
typedef struct _teacher
teacher;
那麼下面我們就可以建立乙個node的鍊錶,然後將
teacher插入到鍊錶內。
傳統鍊錶是將鍊錶操作和業務混合到一塊了,如下圖
linux鍊錶則實現了分離,如下圖
我們可以向phead中新增teacher節點
我們可以將建立的teacher中的linklistnode的首位址新增打phead,然後在對鍊錶操作的時候看一通過偏移位址來找到具體的結構體,當然有個比較方便的方法,那就是將linklistnode node放在結構體的第一位,這樣偏移量是0,他們的位址就重合和,會省去很多麻煩的操作。
感覺這種鍊錶就好比給針穿線,鍊錶相當於線,結構體相當於針,每個結構體都有乙個針孔,用線把他們傳串到一起
一種高度復合的C語言結構體高階應用
一種高度復合的結構體,結構體中有 union,union中又有結構 typedef struct packed 1 supercharger maccessrestrictiondata t tard mextard t textard godbpara t odbpara packed 1 req...
C語言面試題高階篇
1.判斷單鏈表是否帶環?若帶環,求環的長度?求環的入口點?首先判斷是否帶環,在這裡用快慢指標,快指標每次走兩步,慢指標每次只走一步,無環的快指標會先走到頭,如果快指標等於慢指標那麼說名單鍊錶存在環,會返回 相遇點,如果無環會返回 空指標。為什麼乙個走兩步乙個走一步就可以呢,因為fast比slow走的...
C語言高階篇 2 C語言位操作
1 位操作符 1 位與 2 位或 3 位取反 4 位異或 位與 位或 位異或的特點總結 位與 任何數,其實就是1或者0 與1位與無變化,與0位與變成0 位或 任何數,其實就是1或者0 與1位或變成1,與0位或無變化 位異或 任何數,其實就是1或者0 與1位異或會取反,與0位異或無變化 2 左移位 與...