回 帖 发 新 帖 刷新版面

主题:链表中使用二重指针的优点有什么

看有些链表中定义的item,并非使用 *next, *prev,

而是向前指针使用二重指针

类似如下这种:
struct QUEUE_ITEM *tqe_next;      
struct QUEUE_ITEM **tqe_prev;  

请问这样做有什么好处吗,感觉跟直接使用*prev没什么区别,想不太明白

回复列表 (共11个回复)

沙发

lz能否贴上结构的具体定义,附带上链表的建立。。

板凳

[quote]lz能否贴上结构的具体定义,附带上链表的建立。。[/quote]

http://www.iteye.com/topic/292836

详细的在这篇帖子里,FreeBSD和linux内核里都用这种数据结构

3 楼


学识浅薄啊,没有发现什么区别。。

4 楼

[quote]
学识浅薄啊,没有发现什么区别。。[/quote]
区别大了。

5 楼

直观感觉:楼主如果用这种**和*分别实现链表的插入、删除就应该知道为什么了。

6 楼

二重指针最大的意义在于改变指针本身

7 楼

[quote][quote]
学识浅薄啊,没有发现什么区别。。[/quote]
区别大了。[/quote]
我看了会源码,那种用法没有见过,不过实现的话我确实没发现什么区别。。如果是存地址、、也没见这个用在哪。。能否给点意见,谢了。。

8 楼

[quote]直观感觉:楼主如果用这种**和*分别实现链表的插入、删除就应该知道为什么了。[/quote]
我赞成cgl_lgs前辈的观点:)TAILQ_HEAD,应该是tail queue,是用单向链表实现队列,而并不是双向链表(文件名可是queue.h噢)。tqe_prev并不能访问上一个元素,*item->field.tqe_prev指向的不是item的前一个元素,反而是item自己。这样实现,可能只是为了实现TAILQ_INSERT_BEFORE和删除元素等功能而写的。

9 楼

不好意思,用手机发的,不知道怎么一下就发了这么条。

10 楼

同上

我来回复

您尚未登录,请登录后再回复。点此登录或注册