contiki list 鍊錶

2021-09-08 15:04:01 字數 3013 閱讀 2245

#define list_concat2(s1, s2) s1##s2

#define list_concat(s1, s2) list_concat2(s1, s2)

該巨集的作用非常簡單,將s1,s2拼接在一起。其中,##起連線作用,編譯器在預處理時負責將s1,s2連線在一起。比如hello_##world經過編譯器預處理後就變成了hello_world了。

typedef void ** list_t;

#define list(name) \

static void *list_concat(name,_list) = null; \ static list_t name = (list_t)&list_concat(name,_list)

經過巨集替換後,變為

#define list(name) \

static void *name_list = null; \

static list_t name = (list_t)&name_list

該巨集用於申明乙個鍊錶。可以將name_list理解為煉表頭(且該表頭元素是乙個指標),將name理解為乙個指向煉表頭的指標。需要注意的是,name_list所指向的型別必須是乙個結構體。

#define list_struct(name) \

void *list_concat(name,_list); \

list_t name

#define list_struct_init(struct_ptr, name)                              \

do while(0)

struct list ;

struct list只有乙個指標成員next,它指向的型別依然是struct list。在contiki中,該結構體用於用於遍歷鍊錶,我們將在後面的鍊錶函式中看到如何使用該結構體。

void

list_init(list_t list)

作用:初始化鍊錶

解釋

void *

list_head(list_t list)

作用:獲取煉表頭

解釋

void

list_copy(list_t dest, list_t src)

作用:「拷貝」鍊錶

解釋

void *

list_tail(list_t list)

for(l = *list; l->next != null; l = l->next); return l; }

作用:返回鍊錶尾部節點

解釋

list_add(list_t list, void *item)

else }

作用:在鍊錶尾部加入節點

解釋

list_push(list_t list, void *item)

作用:在鍊錶頭部壓入節點

解釋

void *

list_chop(list_t list)

if(((struct list *)*list)->next == null) for(l = *list; l->next->next != null; l = l->next); r = l->next; l->next = null; return r; }

作用:砍掉鍊錶尾部節點,並返回該尾部節點

解釋

void *

list_pop(list_t list)

return l; }

作用彈出煉表頭結點

解釋

void

list_remove(list_t list, void *item)

r = null; for(l = *list; l != null; l = l->next) else l->next = null; return; } r = l; } }

作用:刪除item所指向的節點

解釋

int

list_length(list_t list)

return n; }

作用:返回鍊錶長度

解釋

void

list_insert(list_t list, void *previtem, void *newitem)

else }

作用:插入鍊錶節點

解釋

void *

list_item_next(void *item)

鍊錶 環形鍊錶

環形鍊錶也叫迴圈鍊錶 可以是雙鏈表 也可以是單鏈表 操作原理和單鏈表差不多,只是最後乙個節點不在指向空 null 而是頭 head 這裡以單鏈表舉例 description 環形鍊錶 author lzq date 2018 11 3 20 46 version 1.0 public class a...

鍊錶 初識鍊錶

鍊錶 前言 小弟初學資料結構,有錯誤的地方望大家不吝賜教 認識鍊錶 列表相比陣列更具有優勢,鍊錶不同於資料和其他資料結構依靠位置來進行訪問或者其他操作,如陣列是依靠下表來運算元據。而鍊錶是通過關係來尋找或者運算元據。鍊錶的特性 插入 和 刪除 效率高,只需要變更指向的鏈結點即可。但是隨即訪問操作的效...

鍊錶(鍊錶建立)

先找到了一些與單鏈表相關的概念 2.指標域 ai元素儲存指向後繼元素儲存位置的資訊 3.結點 包含資料域和指標域 4.單鏈表 每個結點只包含乙個指標域的線性表 5.頭指標 要素 鍊錶中第乙個結點的儲存位置 線性表最後乙個結點指標為空 6.頭結點 非要素 單鏈表第乙個結點前附設乙個結點 其指標域指向第...