当前位置: 技术问答>linux和unix
这个链表是如何定义的?
来源: 互联网 发布时间:2016-10-31
本文导语: ../linux/include/list.h struct list_head { struct list_head *next, *prev; }; | 内核的链表,没啥的。 定义一个list_head,再定义两个指针,分别指向前面的和后面的list_head。 | ../linux/include/list.h struc...
../linux/include/list.h
struct list_head {
struct list_head *next, *prev;
};
struct list_head {
struct list_head *next, *prev;
};
|
内核的链表,没啥的。
定义一个list_head,再定义两个指针,分别指向前面的和后面的list_head。
定义一个list_head,再定义两个指针,分别指向前面的和后面的list_head。
|
../linux/include/list.h
struct list_head {
struct list_head *next, *prev;
};
该结构是一个双向链表的头结点,所以没有数据域,和下面的定义是等价的:
struct list_head{
struct list_head * next; //本该指向链表list的第一个结点
struct list_head * prev; //本该指向链表list的最后一个结点
}
如果struct list_head 是如上结构没有没有数据域,即使多个这样结点链成一个双向链,也没什么意义。
双向链表list中结点list_node应该为如下结构:
struct list_node{
struct list_node * next; //指向该节点的下一个结点
struct list_node * prev; //指向该节点的前一个结点
//应该还有个数据域
date_type data;
}
而该双向链表的头结点list_head的结构应该如下:
struct list_head{
struct list_node * next; //指向双向链表list的第一个结点
struct list_node * prev; //指向双向链表list的最后一个结点
}
作为头结点,没有数据域。之所以要引入头结点的目的,是为了对双向链表的操作可以统一。做任何操作都从头结点开始。
struct list_head {
struct list_head *next, *prev;
};
该结构是一个双向链表的头结点,所以没有数据域,和下面的定义是等价的:
struct list_head{
struct list_head * next; //本该指向链表list的第一个结点
struct list_head * prev; //本该指向链表list的最后一个结点
}
如果struct list_head 是如上结构没有没有数据域,即使多个这样结点链成一个双向链,也没什么意义。
双向链表list中结点list_node应该为如下结构:
struct list_node{
struct list_node * next; //指向该节点的下一个结点
struct list_node * prev; //指向该节点的前一个结点
//应该还有个数据域
date_type data;
}
而该双向链表的头结点list_head的结构应该如下:
struct list_head{
struct list_node * next; //指向双向链表list的第一个结点
struct list_node * prev; //指向双向链表list的最后一个结点
}
作为头结点,没有数据域。之所以要引入头结点的目的,是为了对双向链表的操作可以统一。做任何操作都从头结点开始。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。