Contiki教程 鍊錶list

2021-07-11 22:40:40 字數 3133 閱讀 8071

#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)

鍊錶 List

stl中,list class list 的乙個例項 使用乙個doubly linked list管理元素。list不支援隨機訪問,但任何位置上執行元素的安插和移動都非常快。雙向鍊錶 doubly linked list 使用list時必須先包含標頭檔案 include其中list型別系定義於nam...

鍊錶list

includeusing namespace std include 鍊錶list stl中的鍊錶是乙個雙向迴圈鍊錶 list的迭代器是雙向迭代器 void printlist const list l coutl1.push back 10 l1.push back 20 l1.push back...

List雙向鍊錶

include 宣告 list int mylist 定義 mylist.push front 1 頭部插入元素 mylist.push back 2 尾部插入元素 pop front 移除頭部元素 pop back 移除尾部元素 list int iterator lter 迭代器定義 iter ...