双向循环链表
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-7-15
7 人 6 人 4 人
1
双向链表(Doubly Linked List)
如果在一个应用问题中经常要求检测指针向前驱和后继方向移动, 为保证移动的时间复杂度达到最小,就必须采用双向链表表示。
双向链表的结点结构:
左链指针 数据 右链指针
前驱结点
lLink
data
rLink
后继结点
template <class Type> class DblNode { private: Type data; DblNode <Type> * lLink, * rLink; }
2014-7-15 2
带头结点的双向循环链表 :
first
e0
e1
current
…
en-1
first 空表 游标结点: * current 游标结点的前驱结点: * ( current -> lLink ) 游标结点的后继结点: * ( current -> rLink )
2014-7-15 3
双向循环链表的类定义:
调查结果:
讲课进度: 偏快 27 人 适中 20 人 偏慢 2 人 课程难易: 太简单 1 人 偏难 9 人 太繁 1 人 讲解方法: 多讲理论、原理、方法,少讲具体程序 少讲理论,多讲程序和C++内容 多讲具体应用的完整实例 其他: 规定交作业时间,促进学生做作业; 作业太多,要少而精; 最好能现场编程、调试;
2014-7-15 4
2014-7-15
5
template <class Type> class DblList { public: DblList ( Type uniqueVal ); ~DblList ( ); int Length ( ) const; int IsEmpty ( ) { return first->rLink==first ;} int Find ( const Type & target ); Type getData ( ) const; void Firster ( ) { current = first; } int First ( ); int Next ( ); int ) { return current != NULL;} void Insert ( const Type & value ); void Remove ( ) ; private: DblNode <Type> * first, * current; }
7 人 6 人 4 人
1
双向链表(Doubly Linked List)
如果在一个应用问题中经常要求检测指针向前驱和后继方向移动, 为保证移动的时间复杂度达到最小,就必须采用双向链表表示。
双向链表的结点结构:
左链指针 数据 右链指针
前驱结点
lLink
data
rLink
后继结点
template <class Type> class DblNode { private: Type data; DblNode <Type> * lLink, * rLink; }
2014-7-15 2
带头结点的双向循环链表 :
first
e0
e1
current
…
en-1
first 空表 游标结点: * current 游标结点的前驱结点: * ( current -> lLink ) 游标结点的后继结点: * ( current -> rLink )
2014-7-15 3
双向循环链表的类定义:
调查结果:
讲课进度: 偏快 27 人 适中 20 人 偏慢 2 人 课程难易: 太简单 1 人 偏难 9 人 太繁 1 人 讲解方法: 多讲理论、原理、方法,少讲具体程序 少讲理论,多讲程序和C++内容 多讲具体应用的完整实例 其他: 规定交作业时间,促进学生做作业; 作业太多,要少而精; 最好能现场编程、调试;
2014-7-15 4
2014-7-15
5
template <class Type> class DblList { public: DblList ( Type uniqueVal ); ~DblList ( ); int Length ( ) const; int IsEmpty ( ) { return first->rLink==first ;} int Find ( const Type & target ); Type getData ( ) const; void Firster ( ) { current = first; } int First ( ); int Next ( ); int ) { return current != NULL;} void Insert ( const Type & value ); void Remove ( ) ; private: DblNode <Type> * first, * current; }