首页 > 代码库 > Linux内核之旅 链表实现
Linux内核之旅 链表实现
1 #include "stdio.h" 2 #include "stdlib.h" 3 4 struct list_head{ 5 struct list_head *prev; 6 struct list_head *next; 7 }; 8 9 struct task{ 10 int member; 11 struct list_head list; 12 }; 13 14 #define list_entry(ptr,member,type) 15 ((type*)((char *)ptr-(unsigned long)&(((type*)0)->member))) 16 17 #define Init_list(list) {&list,&list} 18 19 static void list_add(struct list_head* ptr,struct list_head* n){ 20 ptr->next=n->next; 21 n->next->prev=ptr; 22 n->next=ptr; 23 ptr->prev=n; 24 } 25 26 #define for_each(list_)27 for(pos=list_.next;pos!=&list_;pos=pos->next)28 {printf("%d ",list_entry(pos,list,struct task)->member);}29 printf("\n"); 30 31 32 void main(){ 33 struct task* tmp; 34 int i; 35 struct list_head mylist=Init_list(mylist),*pos; 36 37 for( i=0;i<5;i++){ 38 tmp=(struct task*)malloc(sizeof(struct task)); 39 scanf("%d",&(tmp->member)); 40 list_add(&(tmp->list),&mylist); 41 } 42 43 for_each(mylist); 44 45 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。