主题:链表中使用二重指针的优点有什么
Garand
[专家分:340] 发布于 2011-06-21 22:33:00
看有些链表中定义的item,并非使用 *next, *prev,
而是向前指针使用二重指针
类似如下这种:
struct QUEUE_ITEM *tqe_next;
struct QUEUE_ITEM **tqe_prev;
请问这样做有什么好处吗,感觉跟直接使用*prev没什么区别,想不太明白
回复列表 (共11个回复)
沙发
fragileeye [专家分:1990] 发布于 2011-06-21 23:27:00
lz能否贴上结构的具体定义,附带上链表的建立。。
板凳
Garand [专家分:340] 发布于 2011-06-22 00:26:00
[quote]lz能否贴上结构的具体定义,附带上链表的建立。。[/quote]
http://www.iteye.com/topic/292836
详细的在这篇帖子里,FreeBSD和linux内核里都用这种数据结构
3 楼
fragileeye [专家分:1990] 发布于 2011-06-22 13:32:00
学识浅薄啊,没有发现什么区别。。
4 楼
cxxcomp [专家分:2370] 发布于 2011-06-22 15:35:00
[quote]
学识浅薄啊,没有发现什么区别。。[/quote]
区别大了。
5 楼
cgl_lgs [专家分:21040] 发布于 2011-06-22 15:46:00
直观感觉:楼主如果用这种**和*分别实现链表的插入、删除就应该知道为什么了。
6 楼
雪光风剑 [专家分:27190] 发布于 2011-06-22 19:30:00
二重指针最大的意义在于改变指针本身
7 楼
fragileeye [专家分:1990] 发布于 2011-06-22 19:36:00
[quote][quote]
学识浅薄啊,没有发现什么区别。。[/quote]
区别大了。[/quote]
我看了会源码,那种用法没有见过,不过实现的话我确实没发现什么区别。。如果是存地址、、也没见这个用在哪。。能否给点意见,谢了。。
8 楼
windy0will [专家分:2300] 发布于 2011-06-22 20:52:00
[quote]直观感觉:楼主如果用这种**和*分别实现链表的插入、删除就应该知道为什么了。[/quote]
我赞成cgl_lgs前辈的观点:)TAILQ_HEAD,应该是tail queue,是用单向链表实现队列,而并不是双向链表(文件名可是queue.h噢)。tqe_prev并不能访问上一个元素,*item->field.tqe_prev指向的不是item的前一个元素,反而是item自己。这样实现,可能只是为了实现TAILQ_INSERT_BEFORE和删除元素等功能而写的。
9 楼
windy0will [专家分:2300] 发布于 2011-06-22 20:53:00
不好意思,用手机发的,不知道怎么一下就发了这么条。
10 楼
windy0will [专家分:2300] 发布于 2011-06-22 20:55:00
同上
我来回复