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