#
ifndef _list_h
#define _list_h
/***核心裡的雙向迴圈鍊錶
*是乙個只有指標域而沒有資料域的結構
*/struct
list;#
define list_head_init(name)
#define list_head(name) \
struct
list name = list_head_init(name)
#define offetof(type, member)
(unsigned
int&
((type *
)0->member))#
define list_entry(ptr, type, member)()
#define list_for_each(pos, head) \
for(pos =
(head)
->next; pos !
=(head)
; pos=pos-
>next)
/***初始化乙個雙向迴圈鍊錶
*/static
inline
void init_list_head(
struct
list
*list
)/**
*函式名:__list_add
*插入乙個new鍊錶
*/static
inline
void __list_add(
struct
list
*new
,struct
list
*prev,
struct
list
*next)
/***函式名:list_add_head
*採用頭插法插入乙個新的鍊錶
*/static
inline
void list_add_head(
struct
list
*new
,struct
list
*head)
/***函式名:list_add_tail
*採用尾插法插入乙個新的鍊錶
*/static
inline
void list_add_tail(
struct
list
*new
,struct
list
*head)
/***函式名:__list_del
*刪除乙個鍊錶
*/static
inline
void __list_del(
struct
list
*prev,
struct
list
*next)
/***函式名:list_del
*刪除乙個具體的鍊錶
*/static
inline
void list_del(
struct
list
*entry)
#endif
list.c:
#include
#include
#include
<
malloc
.h>
#include
"list.h"
struct mylist
;int main(
int args,
char
*argv)
printf
("\n");
list_for_each(pos,
&(head.
list))
printf
("\n");
pos = head.
list
.next;
n = 3;
//刪除第n個元素
for(i = 1; i < n; i++)
pos = pos-
>next;
list_del(pos)
;//刪除鍊錶
list_for_each(pos,
&(head.
list))
return 0;}
0
給主人留下些什麼吧!~~
核心雙向迴圈鍊錶
include include include include include 煉表頭結構 struct list head 真正實現鍊錶插入操作 void list add struct list head nnew,struct list head prev,struct list head n...
linux核心的雙向鍊錶
一 概述 linux核心中大量使用了鍊錶這個基本資料結構,因此有必要去窺探一下其 葫蘆裡賣的是什麼藥 先來些基本知識點吧 1.資料元素間是一對一關係 2.鍊錶中的元素個數是有限的 3.同一表中各資料元素的型別和長度相同。二 實現 先上 有個感性的認識,後面再解釋。include include 煉表...
雙向鍊錶和雙向迴圈鍊錶
和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...