LiteOS之雙向鍊錶

2021-08-09 21:30:32 字數 1036 閱讀 3712

liteos中的雙向鍊錶和linux中的實現相差不大。一直很難理解為什麼liteos系統中會出現類似a.h, a.inc, a.ph的標頭檔案,為了避免採用相同字尾會出現重名。採用不同字尾而檔名相同的好處是啥呢?

鍊錶結構定義

節點的結構定義

typedef struct los_dl_list

los_dl_list;

在鍊錶初始化的頭節點中前後的節點指標指向其本身,同時以此作為判斷鍊錶是否為空的依據。

使用者使用如何定義結構方式

typedef struct usr_list_define

usr_list_define;

關於node和entry概念

簡單的講使用者定義的結構位址為entry位址,而此結構中的los_dl_list占用位址為node位址。鍊錶連線維護的位址為node位址,具體如下圖,綠色為usr_list_dfine結構體。

鍊錶的操作

鍊錶的操作包括初始化、元素的增加、刪除、狀態判斷、元素獲取及遍歷等等。在使用liteos的鍊錶介面進行鍊錶操作時,鍊錶中儲存的資訊均為node的位址資訊。而當訪問使用者定義的機構時,需要進行位址的轉換,即需要從node的位址轉換為entry位址。在liteos的介面中已經提供了entry位址轉換的相關介面,看看具體的實現方式。

實現**如下:

#define los_off_set_of(type, member) ((long)&((type *)0)->member)

#define los_dl_list_entry(item, type, member) ((type *)((char *)item - los_off_set_of(type, member)))

首先得到然後得到偏移值offset,然後從node的位址減去offset得到相應的entry位址。

鍊錶之雙向鍊錶

首先在說下單鏈表,才能和雙鏈表作比較 單鏈表 單向鍊錶 由兩部分組成 資料域 data 和結點域 node 單鏈表就像是一條打了很多結的繩子,每乙個繩結相當於乙個結點,每個節結點間都有繩子連線,這樣原理的實現是通過node結點區的頭指標head實現的,每個結點都有乙個指標,每個節點指標的指向都是指向...

Python之雙向鍊錶

雙向鍊錶是除頭和尾以外,頭指標指向前一節點,尾指標指向後一節點 python實現 定義雙向鍊錶 class listnode def init self,data self.head none self.data data self.next none 判斷是否為空 def isempty self...

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...