数据结构教程第九课循环链表与双向链表

文章作者 100test 发表时间 2007:03:10 18:29:47
来源 100Test.Com百考试题网


本课主题: 循环链表与双向链表
教学目的: 掌握循环链表的概念,掌握双向链表的的表示与实现
教学重点: 双向链表的表示与实现
教学难点: 双向链表的存储表示
授课内容:
一、复习线性链表的存储结构

二、循环链表的存储结构
循环链表是加一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。

循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针。
三、双向链表的存储结构

提问:单向链表的缺点是什么?
提示:如何寻找结点的直接前趋。
双向链表可以克服单链表的单向性的缺点。
在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。
1、线性表的双向链表存储结构
typedef struct DulNode{
struct DulNode *prior.
ElemType data.
struct DulNode *next.
}DulNode,*DuLinkList.
对指向双向链表任一结点的指针d,有下面的关系:
d->next->priou=d->priou->next=d
即:当前结点后继的前趋是自身,当前结点前趋的后继也是自身。
2、双向链表的删除操作

Status ListDelete_DuL(DuLinkList &.L,int i,ElemType &.e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR.
e=p->data.
p->prior->next=p->next.
p->next->prior=p->pror.
free(p).
return OK.
}//ListDelete_DuL

3、双向链表的插入操作

Status ListInsert_DuL(DuLinkList &.L,int i,ElemType &.e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR.
if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR.
s->data=e.
s->prior=p->prior.
p->prior->next=s.
s->next=p.
p->prior=s.
return OK.
}//ListInsert_DuL

相关文章


数据结构教程第十一课栈的应用
数据结构教程第九课循环链表与双向链表
数据结构教程第八课线性表的链式表示与实现
数据结构教程第七课实验一线性表的顺序存储实验
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛