双向循环链表的设计思路
-数据结点之间在逻辑上构成双向循环链表,头结点仅用于结点的定位。
实现思路
-通过模板定义DualCircleList 类,继承自DualLinkList类
-在DualCircleList 内部使用Linux内核链表进行实现
-使用struct llist_head定义DualCircleList的头结点
-特殊处理:循环遍历时忽略头结点
实现要点
-通过list_head进行目标结点定位(position(i))
-通过list_entry将list_head指针转换为目标结点指针
-通过list_for_each实现int find(const T& e)函数
-遍历函数中的next() 和 pre() 需要考虑跳过头结点
总结:
Linux内核链表是带头结点的双向循环链表
-DualCircleList使用Linux内核链表进行内部实现
-DualCircleList在循环遍历时需要跳过头结点
-将list_head指针转换为目标结点指针时,使用list_entry宏